Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Пт Июл 30 2004 13:02 Заголовок сообщения: php: как делают чаты? |
|
|
Собственно проблема в том как пхп увидеть html объект
такой как инпут, кнопка. С кнопкой все в порядке. Я могу например
повесить ее на onClick а затем туда поместить код пхп.
А как бать с инпутом. Как пхп увидеть его. и получить value. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Июл 30 2004 22:33 Заголовок сообщения: |
|
|
Вопрос весьма непонятен.
И я, (я) думаю он должен быть сформулирован чють иначе.
А по сути, все весьма просто.
//!!!!!!! |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Сб Июл 31 2004 21:35 Заголовок сообщения: |
|
|
Пернеформулирую. Имеется текстареа и кнопка. По нажатии кнопки
должно текстариа переноситься в файл без релоада.
Тпереь понятно? |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Вт Авг 03 2004 13:33 Заголовок сообщения: |
|
|
Кнопка жмется на стороне клиента, поэтому клиент должен обратиться к серверу (reload) и передать ему информацию.
Впрочем, ты можешь вызвать скрипт в отдельном окне, java-методами, перенеся его за пределы видимости экрана. Передашь ему параметры через Get (и никто не узнает
Или перегружать в маленьком фреймике, или запрашивать как картинку, опять-таки java методом (src="post?mymesage=..."). |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вт Авг 03 2004 19:47 Заголовок сообщения: |
|
|
Делаеш так:
<form name="form1" method="post" action="SCRIPT.PHP" >
<textarea name="textarea" cols="20" rows="5"></textarea><BR>
<input type="submit" name="Submit" value="send">
</form>
а переменная 'TEXTAREA' в SCRIPT.PHP будет иметь ... , значение <input type>
OK/ |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Авг 04 2004 01:31 Заголовок сообщения: |
|
|
Уважаемый Гость (тот который последний), читайте пожалуйста внимательнее. |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Ср Авг 11 2004 15:15 Заголовок сообщения: |
|
|
А как конкретно это сделать?
Вот такой вариант не пишет ничего в файл.
<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 );
?>
как сделать? |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Чт Авг 12 2004 04:34 Заголовок сообщения: |
|
|
Попробуем проще:
<html>
<body>
<iframe height=0 src="chat.php" name=fr></iframe>
<form action=chat.php method=get target=fr>
<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, $_GET[text]);
fclose( $file );
?> |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Пт Авг 13 2004 04:29 Заголовок сообщения: |
|
|
Я что-то вообще не понял в чем проблема.
Есть поле, есть кнопка и нужно чтобы текст который написан в этом поле по нажатию кнопки заносился в файл?
Собственно в чем тут чат? |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Пт Авг 13 2004 09:52 Заголовок сообщения: |
|
|
2Almaz
Конечно это не чат. Не сразе же я чат напишу. Уровень не тот.
А постепенно. Я кстати вижу кажись как писать чат даже без
сессий(и без привата) но со смайлами.
Единственно чего я не пойму это когда делать рефреш фрейма
с текстом? По прошествии времени или по заносу сообщения.
1ое можно с помощью мета сделать. 2ое применяя насильственный
рефреш. под ие насильственный рефреш делается при момощи
execComand а как в других браузерах?
2GREA
без тебя я бы не разобрался. |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Пн Авг 16 2004 01:48 Заголовок сообщения: |
|
|
2droopy: Понятно, приблизительно. Если тебя интересует чат и добавление сообщений в файл то читай топик с таким же инемен как и этот в форуме "Создание сайтов".
Кстати там я и писал что у тебя в любом случае возникнет вопрос вывода фрейма с сообщениями.
А зачем тебе насильственный метод, ведь он по моему перегрузит весь браузер, а тебе то надо только там где сообщения показываются.
Если хочешь сделать чат с перезагрузкой вот такой, то meta самый лучший выход. В таком случае можно легко предлагать пользователю сменить время через каторое у каждого этот фрейм обновится.
Это все не должно быть сложно.
Более интересно создать чат чтобы он был без обновления фрейма, а просто и аккуратно отображал новые мессаги.
На данный момент мне извесно 2 реальных метода реализации: это демон, и это flush() в PHP.
2всем: кто может подсказать еще какие либо методы, буду рад обсудить (только не надо предлагать использовать JavaScript для этого ). |
|
Вернуться к началу |
|
|
МГ Гость
|
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Пн Авг 16 2004 17:43 Заголовок сообщения: |
|
|
2Almaz
Напиши поподробнее как с демоном.На чем писать? На сях?
С флушем я кажется понял как. Делаем форму, по экшн заносим
сообщение в файл(в который мы можем писать только одно сообщение). В форме на кнопку на onClick цепляем ф-цию в которую
пишем что-то типа такого:
document.getElementById( "frame" ).innerHTML += <? echo fgets( $file );
flush(); ftruncate( $file ); ?>
я правильно понял?
2МГ
Слышал что не рекомендуют писать чаты на пхп+майскл. грузит сервер. но почитаю как-нибудь. |
|
Вернуться к началу |
|
|
Almaz
Зарегистрирован: 13.08.2004 Сообщения: 45
|
Добавлено: Вт Авг 17 2004 01:24 Заголовок сообщения: |
|
|
2МГ: Пока без комментариев. Посмотрю с дома - с работы на этот адрес я не попаду. Инет у нас такой суперский. Да и я как бы просил методы реализации, а не демонстрацию.
2droopy: А чего на сях? Пиши на чем угодно. Вот например чат chat.spb.ru вот этот самый демон написан на (если не ошибаюсь) TSH.
Все откомпилено и по лицензии дизасмить низя. )
Суть то в чем, тебе надо повесить на серваке процесс и этим процессом открыть порт, потом народ будет ломится на сей порт т задача твоего демона просто держать соединение с пользователем, ну вообщем обычный Client-Server. Ну и естественно данные сохранять которые от клиентов идут. Потом обрабатывать и т.п.
У меня не было возможности по тестировать все это, потом что я знаю всего один хостинг где тебе разрешат открыть порт на сервере. Там естественно подороже все это стоит...
Теперь о flush();
Когда писали мы (это я и еще 2 человека, входящих в одну инитгруппу из 19 чел. которая создает тематический проект - важно то что центом должен быть чат), так вот, мы использовали БД легко и весело, не знаю что там с нагрузкой на сервак, хостинг претензий не предъявлял.
Функция flush(); у нас использовалась во фрейме вывода сообщений. Исходный код этого фрейм собственно преставлял собой бесконечный цикл (while(1){}) внутри цикла происходила проверка есть ли новые сообщения в табличке с мессагами, если есть он их оттуда выстаскивал, дальше вызывались различные функции с разных классов (текст нужно отформатировать в зависимотри от настроек пользователя). Так вот все это писалось в текстовыую переменную. А потом делалось flush($все инфа), потом sleep(1); и цикл повторяется.
10 человек чат держал легко и без тормозов. А больше там просто не было никогда, потому что проект закрытый, и как я уже говорил всего там 19 чел.
Можешь конечно попробывать сделать так - сами мессаги хранить в файлах, а остальную инфу типа конфиг, аккаунты юзеров и т.п. уже в БД. |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Пн Авг 30 2004 15:37 Заголовок сообщения: |
|
|
Алмазу:
Слушай. Есть файл для мессага. Я хочу его блокировать и держать
блокированным пока все юзера его не прочтут и не зипишут в
браузер. Для этого мне нужен еще один файл данных где содержится
имя пользователя и флаг прочтенности сообщения. Скрипт в цикле будет открыать и считывать этот дата-файл если все считали то блокировка снимается. Однако мне это не
очень нравится. Как это делал ты? |
|
Вернуться к началу |
|
|
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Пн Авг 30 2004 19:24 Заголовок сообщения: |
|
|
Сделай отдельный файл со списком пользователей и для каждого пользователя создай отдельный файл с флагом. ИМХО так дедлоков меньше будет. |
|
Вернуться к началу |
|
|
NetFantom
Зарегистрирован: 27.01.2004 Сообщения: 41 Откуда: Санкт-Петербург
|
Добавлено: Ср Сен 01 2004 12:25 Заголовок сообщения: |
|
|
Мда...такие чаты писали лет 10-15 назад...с блокировкой файла...прелесть =)))
Если серьезно то это неэффективно. Можно конечно еще извратить и использовать БД но это тоже бредово.
На самом деле раздели чат на следующие модули:
Ядро (лучше всего на C, с рабным успехом на Delphi/Kylix, можно ня Java, но я не пробовал). Собственно в памяти его и будут у тебя плавать и обрабатываться сообщения, и никаких файлов и блокировок не надо. И комнаты там реализуй и приваты.
Часть на PELR или PHP которая будет соственно генерировать страницы по запросам клиентов, общаясь с ядром через его интерфейс.
Ну и клиенская часть - скорее всего JavaScript (хотя может и VBS, и на Java, или вообще извратиться и написать ActiveX объект).
Так что в добрый путь. Только очень рекомендую изначально спроектировтать и все продумать очень тщательно. А с блокируемыми файлами даже не возись - это тупик. |
|
Вернуться к началу |
|
|
droopy
Зарегистрирован: 28.07.2004 Сообщения: 168
|
Добавлено: Ср Сен 01 2004 18:06 Заголовок сообщения: |
|
|
Для проекта с автоматическим обновлением контента по таймеру это
может быть и не плохо. Но я хочу чтобы все было "плавно".
Но я не знаю как реализовать идею с бесконечным циклом.
Страница то целиком не загружается. Вот геморой.
НетФантому:
т.е. по сути ты предлагаешь написать демон. Я в сях вообще шарю
но демонов никогда не писал. Он то должен общаться с юзерами.
Открывать порты. Хостеры должны еще разрешить это делать.
Вообще для написания демона что я должен использовать. И если
не сложно опиши вообще механизм создания. |
|
Вернуться к началу |
|
|
NetFantom
Зарегистрирован: 27.01.2004 Сообщения: 41 Откуда: Санкт-Петербург
|
Добавлено: Ср Сен 01 2004 18:50 Заголовок сообщения: |
|
|
Уфф....впринципе да, согласен. Я сразу размахнулся на большой чат =) Полноценный такой, с кучей функций. Понятно, что если ты на каком-то мелком хостинге то это просто нереально.
Да, впринципе это демон (резидентная программа, сервис и фиг знает еще что=) Короче главный камень - она должна крутиться непрерывно а не запускаться по запросу клдиента как тот же PHP скрипт. Именно это и основная трудность на которую должен пойти хостер =) А что касается открывания портов и общения с юзерами это все не нужно. Механизм такой - клиент обращается к PHP скрипту, а вот PHP скрипт уже запрашивает ядро. Как будет реализован интерфейс это уже дело второе - сигналы, сообщения, COM-модель, каналы и всякая чертовщина межпроцессных взаимодействий в Win и Unix.
На самом деле я начинал заниматься созданием такой штукенции, но осилить полностью одному не было ни времени ни желания.
Если хочешь, можем списаться, найти еще людей и попробовать замутить, благо у меня пока что есть собственный сервак в Нете (правда на виндах), так что полигон есть.
А насчет плавности там и всего остального...в том-то и соль что при модульной структуре у нас все части будут являться абсолютно независимыми и взаимозаменяемыми. За обновление, плавность и прочую юзабили отвечает клиентская часть которая завязана на PHP скрипты движка, которые являются промежуточным звеном между клиентом и ядром чата.
Впринципе, и все части можно писать абсолтно независимо - ядро отдельно, а клиентская часть и PHP скрипты отдельно. Для тестирования и отладки клиентской части даже ядро не нужно - можно поставить заглушку и все данные PHP скриптом генерить. |
|
Вернуться к началу |
|
|
|