Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Пт Июл 30 2004 13:24 Заголовок сообщения: php: как делают чаты? |
|
|
Собственно проблема в том как пхп увидеть html объект
такой как инпут, кнопка. С кнопкой все в порядке. Я могу например
повесить ее на onClick а затем туда поместить код пхп.
А как бать с инпутом. Как пхп увидеть его. и получить value. |
|
Вернуться к началу |
|
|
Marmota Bobak
Зарегистрирован: 28.07.2004 Сообщения: 68
|
Добавлено: Пт Июл 30 2004 19:37 Заголовок сообщения: |
|
|
я не понял, в чем проблема? то есть как получить? а почему нельзя через форму post'ом????? |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Пт Июл 30 2004 20:03 Заголовок сообщения: |
|
|
Тогда ведь будет релоад. А надо чтобы его не было.
Или как-то отправить форму без релоада. ТОлько как? |
|
Вернуться к началу |
|
|
napalm Гость
|
Добавлено: Сб Июл 31 2004 14:33 Заголовок сообщения: |
|
|
PHP - на сервере javascript в Броузере и по другому никак! Один фрей должен выводить написанное и через некот. время перезагружаться автоматическм а в дугом фрейме форма ввода |
|
Вернуться к началу |
|
|
Marmota Bobak
Зарегистрирован: 28.07.2004 Сообщения: 68
|
Добавлено: Пн Авг 02 2004 10:13 Заголовок сообщения: |
|
|
napalm совершенно прав - PHP ведь работает только на стороне сервера, ты НИКАК не сможешь его выполнить без обращения клиента к серваку, то есть без перезагрузки браузера..... Пришла еще одна извращенная идея (она без фреймов, но совсем извращенная =) - при обращении к серваку открывать новое окно, чтобы старое не перезагружать и там выполнять PHP, а потом яваскриптом передавать результат в старое окно и обновлять чат локально у клиента. Еще один вариант - передавать на сервер сразу весь текст (+"переменные состояния" чата, если надо) и потом его заново выводить, на представляешь себе нагрузку на сервак? (и на клиента, кстати, тоже)!
Короче, вариант с фреймами мне привлекательнее |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Ср Авг 11 2004 15:16 Заголовок сообщения: |
|
|
А как конкретно это сделать?
Вот такой вариант не пишет ничего в файл.
<html>
<head><script>
function submit()
{
window.frames[0].src = "chat.php";
window.location.href = "index.html";
}
</script></head >
<body>
<iframe height=0 src="chat.php"></iframe>
<form onSubmit="submit()">
<input name="text" type=text size=30>
<input type=submit value="написать">
</form>
</body>
</html>
chat.php:
<?
$file = fopen( "chat.dat", "w+t" );
flock( $file, LOCK_EX );
fputs( $file, $text );
fclose( $file );
?>
как сделать? |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Пт Авг 13 2004 06:13 Заголовок сообщения: |
|
|
А вот нашел еще опять этот топик только в другом форуме.
Здесь более понятно что к чему.
Совсем ничего не перегружать конечно не получится, но можно сделать чтобы это меньше всего влияло на систему.
Если ты делаешь чат, то по технологии тебе нужно как минимум 3 фрема, а лучше 5
--------------------
| 1 |
| |
===========
| 2 |
--------------------
| 3 |
--------------------
1 (1.php) (name="frm_1") - это собственно фрейм отображения мессаг.
2 (2.php) (name="frm_2")- это маленький фреймик (он то и будет перегружатся при отправке мессаги).
3 (3.php) (name="frm_3")- фрейм в котором будет располагатся формочка ввода.
трейтий фрейм будет выглядить по простому примерно так:
<form action="2.php" method=POST target="frm_2">
<input type="text" name="msg">
<input type="submit" value="Отправка">
</form>
таким образом когда юзер написшет мессагу и отправит данные во фрейм 2, скрипту 2.php, и этот скрипт в свою очередь получит переменную msg в которой будет тот текст который набрал юзер, и соответственно запишет этот текст в файл.
А 1 фрейму надо обращатся к этому файлу и выводить сообщения.
Как сделать чтобы при выводе фрейм не обновлялся, это уже другой вопрос, но варианты есть.
P.S.: во втором фрейме можешь выводить что то типа "Ваша мессага отправлена" после его релоада, это будет почти не заметно. |
|
Вернуться к началу |
|
|
Гость Гость
|
Добавлено: Ср Дек 01 2004 10:48 Заголовок сообщения: |
|
|
Дык, товарищи, все просто! В опциях апача есть строчка - максимальное время выполнения скрипта. СТавим там максимально возможное значение. Далее во фрейме с выводом мессаг просто каждые скажем пол секунды проверяем файл, в который записываются мессаги. Собсно все просто |
|
Вернуться к началу |
|
|
Moby
Зарегистрирован: 19.11.2004 Сообщения: 268
|
Добавлено: Пт Дек 03 2004 17:46 Заголовок сообщения: 2Гость. не всё так просто |
|
|
Грабли №1. всё то время которое выполняеца скрипт - он висит в памяти сервера и жрёт серверные ресурсы. сколько пользователей в чате - столько и версий скрипта будут хавать ресурсы сервера.
Грабли №2. что то мне подсказывает, что нифига не будет таким макаром. точнее идея конечно заслуживает внимание - постоянный коннект, но не такими методами что ты предлагаешь. варварский он какой то.
теперь не грабли а реализация (так как я это делаю):
Фрейм1 - фрейм куда выводим сообщения
Фрейм2 - фрейм где наша форма ввода сообщения (таргетим её на третий фрейм)
Фрейм3 - невидимый фрейм, который принимает сообщения и пихает их куда следует (например в базу или в файл). и этот же фрейм выводит _новые_ сообщения в видимый фрейм путём яваскрипта.
в принципе, на сколько я понимаю - это класическая схема чата, но опять таки, все мои попытки реализации этой схемы приводили к тому, что чат хавает много серверных ресурсов при аудитории в 20-30 человек. хотя можа это у миня проста лапы кривые _________________ Профи - это оборзевший ламмер |
|
Вернуться к началу |
|
|
|