Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

php: как делают чаты?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Пт Июл 30 2004 13:02    Заголовок сообщения: php: как делают чаты? Ответить с цитатой

Собственно проблема в том как пхп увидеть html объект
такой как инпут, кнопка. С кнопкой все в порядке. Я могу например
повесить ее на onClick а затем туда поместить код пхп.
А как бать с инпутом. Как пхп увидеть его. и получить value.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






СообщениеДобавлено: Пт Июл 30 2004 22:33    Заголовок сообщения: Ответить с цитатой

Вопрос весьма непонятен.
И я, (я) думаю он должен быть сформулирован чють иначе.
А по сути, все весьма просто.
//!!!!!!!
Вернуться к началу
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Сб Июл 31 2004 21:35    Заголовок сообщения: Ответить с цитатой

Пернеформулирую. Имеется текстареа и кнопка. По нажатии кнопки
должно текстариа переноситься в файл без релоада.
Тпереь понятно?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Вт Авг 03 2004 13:33    Заголовок сообщения: Ответить с цитатой

Кнопка жмется на стороне клиента, поэтому клиент должен обратиться к серверу (reload) и передать ему информацию.
Впрочем, ты можешь вызвать скрипт в отдельном окне, java-методами, перенеся его за пределы видимости экрана. Передашь ему параметры через Get (и никто не узнаетSmile
Или перегружать в маленьком фреймике, или запрашивать как картинку, опять-таки 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/Smile
Вернуться к началу
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 );
?>
как сделать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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    Заголовок сообщения: Ответить с цитатой

Я что-то вообще не понял в чем проблема.
Есть поле, есть кнопка и нужно чтобы текст который написан в этом поле по нажатию кнопки заносился в файл?
Собственно в чем тут чат? Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Пт Авг 13 2004 09:52    Заголовок сообщения: Ответить с цитатой

2Almaz
Конечно это не чат. Не сразе же я чат напишу. Уровень не тот.
А постепенно. Я кстати вижу кажись как писать чат даже без
сессий(и без привата) но со смайлами.
Единственно чего я не пойму это когда делать рефреш фрейма
с текстом? По прошествии времени или по заносу сообщения.
1ое можно с помощью мета сделать. 2ое применяя насильственный
рефреш. под ие насильственный рефреш делается при момощи
execComand а как в других браузерах?
2GREA
без тебя я бы не разобрался.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Almaz



Зарегистрирован: 13.08.2004
Сообщения: 45

СообщениеДобавлено: Пн Авг 16 2004 01:48    Заголовок сообщения: Ответить с цитатой

2droopy: Понятно, приблизительно. Если тебя интересует чат и добавление сообщений в файл то читай топик с таким же инемен как и этот в форуме "Создание сайтов".
Кстати там я и писал что у тебя в любом случае возникнет вопрос вывода фрейма с сообщениями.
А зачем тебе насильственный метод, ведь он по моему перегрузит весь браузер, а тебе то надо только там где сообщения показываются.
Если хочешь сделать чат с перезагрузкой вот такой, то meta самый лучший выход. В таком случае можно легко предлагать пользователю сменить время через каторое у каждого этот фрейм обновится.
Это все не должно быть сложно.
Более интересно создать чат чтобы он был без обновления фрейма, а просто и аккуратно отображал новые мессаги.

На данный момент мне извесно 2 реальных метода реализации: это демон, и это flush() в PHP.

2всем: кто может подсказать еще какие либо методы, буду рад обсудить (только не надо предлагать использовать JavaScript для этого Smile ).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
МГ
Гость





СообщениеДобавлено: Пн Авг 16 2004 12:42    Заголовок сообщения: Ответить с цитатой

http://dushik.iatp.org.ua/1 - чат с релоадом и без
Вернуться к началу
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Пн Авг 16 2004 17:43    Заголовок сообщения: Ответить с цитатой

2Almaz
Напиши поподробнее как с демоном.На чем писать? На сях?
С флушем я кажется понял как. Делаем форму, по экшн заносим
сообщение в файл(в который мы можем писать только одно сообщение). В форме на кнопку на onClick цепляем ф-цию в которую
пишем что-то типа такого:
document.getElementById( "frame" ).innerHTML += <? echo fgets( $file );
flush(); ftruncate( $file ); ?>
я правильно понял?
2МГ
Слышал что не рекомендуют писать чаты на пхп+майскл. грузит сервер. но почитаю как-нибудь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Almaz



Зарегистрирован: 13.08.2004
Сообщения: 45

СообщениеДобавлено: Вт Авг 17 2004 01:24    Заголовок сообщения: Ответить с цитатой

2МГ: Пока без комментариев. Посмотрю с дома - с работы на этот адрес я не попаду. Smile Инет у нас такой суперский. Smile Да и я как бы просил методы реализации, а не демонстрацию. Wink

2droopy: А чего на сях? Пиши на чем угодно. Вот например чат chat.spb.ru вот этот самый демон написан на (если не ошибаюсь) TSH.
Все откомпилено и по лицензии дизасмить низя. Smile)
Суть то в чем, тебе надо повесить на серваке процесс и этим процессом открыть порт, потом народ будет ломится на сей порт т задача твоего демона просто держать соединение с пользователем, ну вообщем обычный Client-Server. Ну и естественно данные сохранять которые от клиентов идут. Потом обрабатывать и т.п.
У меня не было возможности по тестировать все это, потом что я знаю всего один хостинг где тебе разрешат открыть порт на сервере. Там естественно подороже все это стоит...

Теперь о flush();
Когда писали мы (это я и еще 2 человека, входящих в одну инитгруппу из 19 чел. которая создает тематический проект - важно то что центом должен быть чат), так вот, мы использовали БД легко и весело, не знаю что там с нагрузкой на сервак, хостинг претензий не предъявлял. Smile
Функция flush(); у нас использовалась во фрейме вывода сообщений. Исходный код этого фрейм собственно преставлял собой бесконечный цикл (while(1){}) внутри цикла происходила проверка есть ли новые сообщения в табличке с мессагами, если есть он их оттуда выстаскивал, дальше вызывались различные функции с разных классов (текст нужно отформатировать в зависимотри от настроек пользователя). Так вот все это писалось в текстовыую переменную. А потом делалось flush($все инфа), потом sleep(1); и цикл повторяется. Smile
10 человек чат держал легко и без тормозов. А больше там просто не было никогда, потому что проект закрытый, и как я уже говорил всего там 19 чел.
Можешь конечно попробывать сделать так - сами мессаги хранить в файлах, а остальную инфу типа конфиг, аккаунты юзеров и т.п. уже в БД.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Пн Авг 30 2004 15:37    Заголовок сообщения: Ответить с цитатой

Алмазу:
Слушай. Есть файл для мессага. Я хочу его блокировать и держать
блокированным пока все юзера его не прочтут и не зипишут в
браузер. Для этого мне нужен еще один файл данных где содержится
имя пользователя и флаг прочтенности сообщения. Скрипт в цикле будет открыать и считывать этот дата-файл если все считали то блокировка снимается. Однако мне это не
очень нравится. Как это делал ты?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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    Заголовок сообщения: Ответить с цитатой

Для проекта с автоматическим обновлением контента по таймеру это
может быть и не плохо. Но я хочу чтобы все было "плавно".
Но я не знаю как реализовать идею с бесконечным циклом.
Страница то целиком не загружается. Вот геморой.
НетФантому:
т.е. по сути ты предлагаешь написать демон. Я в сях вообще шарю
но демонов никогда не писал. Он то должен общаться с юзерами.
Открывать порты. Хостеры должны еще разрешить это делать.
Вообще для написания демона что я должен использовать. И если
не сложно опиши вообще механизм создания.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
NetFantom



Зарегистрирован: 27.01.2004
Сообщения: 41
Откуда: Санкт-Петербург

СообщениеДобавлено: Ср Сен 01 2004 18:50    Заголовок сообщения: Ответить с цитатой

Уфф....впринципе да, согласен. Я сразу размахнулся на большой чат =) Полноценный такой, с кучей функций. Понятно, что если ты на каком-то мелком хостинге то это просто нереально.
Да, впринципе это демон (резидентная программа, сервис и фиг знает еще что=) Короче главный камень - она должна крутиться непрерывно а не запускаться по запросу клдиента как тот же PHP скрипт. Именно это и основная трудность на которую должен пойти хостер =) А что касается открывания портов и общения с юзерами это все не нужно. Механизм такой - клиент обращается к PHP скрипту, а вот PHP скрипт уже запрашивает ядро. Как будет реализован интерфейс это уже дело второе - сигналы, сообщения, COM-модель, каналы и всякая чертовщина межпроцессных взаимодействий в Win и Unix.
На самом деле я начинал заниматься созданием такой штукенции, но осилить полностью одному не было ни времени ни желания.
Если хочешь, можем списаться, найти еще людей и попробовать замутить, благо у меня пока что есть собственный сервак в Нете (правда на виндах), так что полигон есть.

А насчет плавности там и всего остального...в том-то и соль что при модульной структуре у нас все части будут являться абсолютно независимыми и взаимозаменяемыми. За обновление, плавность и прочую юзабили отвечает клиентская часть которая завязана на PHP скрипты движка, которые являются промежуточным звеном между клиентом и ядром чата.
Впринципе, и все части можно писать абсолтно независимо - ядро отдельно, а клиентская часть и PHP скрипты отдельно. Для тестирования и отладки клиентской части даже ядро не нужно - можно поставить заглушку и все данные PHP скриптом генерить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...