Мини-чатик в один файл на PHP, HTML, CSS и JS
01.05.2014 18:24
208Ну добили они меня - составил я список подарков, нужных мне, чтоб не пылились потом на полочке. И дальше встал вопрос - а как сделать, чтобы народ (много народа), не знающий или плохо знающий друг-друга, все это мог обсудить и скооперироваться?
Отправить всем емейлы? А если люди не хотят чтобы кто-то еще знал их емейл? Тоже и про телефоны. Экзотические вещи вроде гуглспредщитов и всякой другой онлайн-ахинеи мне были не сильно интересны - все-таки конфиденциальная информация :)
И вообще, программист я или где?
За час с небольшим был написан мини-чатик с пасьянсом и дурными феями, еще час на доделывания хотелок от народа и час на дебаг.
Вроде даже все получилось и даже понравилось. (Хотя время от времени раздавались вопли мол: "Ну че за херня - файл нельзя отправить, голосовое сообщение тоже, и вообще какого хрена без 3D?")
На следующий выходной день потратил часов 5 на приведение всего этого к красоте, а теперь хочу представить это дело Вам - вдруг кому сгодится, и времени тратить не надо будет.
Фишки:
- Весь чат одним файлом на PHP + HTML + CSS + JS
- Никакой БД, вся история хранится в HTML файлике, куда засовываются уже оформленные в HTML сообщения
- Авторизации тоже не предусмотрено - все свои
- Никаких WebSockets и long polling-ов - старый добрый хардкорный "А есть чо?"
- Запоминание выбранного ника в куках
- Вырезание всякого "ге" из текста и ника при постинге и ограничение их по длине
- Обрезка подгружаемого куска чата
- Отправка данных только в случае, если они были изменены (но отправляется весь кусок)
- Отключаемый автоскролл
- Отключаемый звук отправки/получения сообщения
- Возможность задать время опроса, путь до файла с чатом, длину пересылаемого куска, оформление сообщений
- Блокирование диалогов при загрузке и постинге, если скорость низкая
- Подсказки в случае всяких фейлов
- Кросс-браузерная работа - традиционно WebKit-ы (Chrome, Safari и др.), Firefox.
IE браузером не считаю - это программа типа WGET для скачивания файлов (в том числе нормальных браузеров) просто с GUI - но и в нем должно работать, пусть и не так красиво - Без каких-либо jQuery и других фреймворков - только чистый JS, только хардкор
- Все максимально просто, коротко, понятно и со вкусом
- Огромное пространство для творчества и модификаций
Пользуйтесь на здоровье!
P.S. Иногда вот так покодить на чистом JS, вспомнить как сделать анимацию вручную, как работают стандартные селекторы и написанная с нуля обвязка XMLHttpRequest - это просто клево.
Вообще, чистый JS и когда ты сам себе в коде хозяин, а не лениво просишь "Эй, jQuery дай-ка мне тот DIV и отправь его содержимое по AJAX на воон тот URL!" - это приятно и полезно для мозгов :)
P.P.S. Не забудьте на хостинге правильно настроить кодировку и проверить наличие расширения mbstring у PHP - иначе будут проблемы с работой чата
История версий:
09.09.21 |
|
09.08.21 |
|
02.07.20 |
|
06.02.20 |
|
22.01.20 |
|
24.11.19 |
|
10.04.18 |
|
08.05.14 |
|
01.05.2014, Protocoder
Возможно проблемы, которые у Вас наблюдаются, связаны с тем, что чат рассчитан по кодировку CP1251 и сервер должен быть настроен на нее "по умолчанию".
Как вариант - если сервер Apache - добавьте в каталог с чатом файл .htaccess (или добавьте строчку к существующему .htaccess):
AddDefaultCharset windows-1251
Должно помочь.
Я попробовал то , что вы мне описали , результатов не дало. Да , сервер Apache.
Может быть на сервере не встает 1251 локаль - что запросто может быть.
Посмотреть это элементарно - в самом начале PHP-файла с чатом идет установка локали - вот после нее и вывести текущую локаль - будет ли она 1251?
Отладкой вашего веб-сервера у меня, к сожалению, времени заниматься нет.
Но так как этот чат был проверен множество раз и на разных серверах - проблема точно у Вас, и я на 90% уверен, что дело в кодировке и заголовках.
Кстати, для Apache и .htaccess можно попробовать еще вот такой вариант:
CharsetDisable on
CharsetDefault windows-1251
CharsetSourceEnc windows-1251
AddDefaultCharset windows-1251
Как очистить чат от ненужных записей?
Либо вообще удалить этот файл - тогда чат пересоздаст его и будет полностью чист.
function parse_links( $str ) {
$str = str_replace( 'www.', 'http://www.', $str );
$str = preg_replace( '|http://([a -zA-Z0-9-._()/]+)|', '<a href="http://$1">$1</a>', $str );
$str = preg_replace( '|https://([ a-zA-Z0-9-._()/]+)|', '<a href="https://$1">$1</a>' , $str );
$str = preg_replace( '/(([a-z0-9+ _-]+)(.[a-z0-9+_-]+)*@([a -z0-9-]+.)+[a-z]{2,6})/', '<a href="mailto:$1">$1</a>', $str );
return $str;
}
if ( $text ) $text = parse_links( $text );
Дело в том, что строковые функции в PHP отличаются для работы с UTF-8 или с WINDOWS-1251.
Поэтому для того, чтобы заработало в UTF-8 потребуется переписать весь PHP-код, работающий со строками.
Еще как вариант - оставить WINDOWS-1251 только для чата - создать отдельную папку для чата на хостинге и через .htaccess дать всему, что внутри кодировку WINDOWS-1251.
Создавал отдельную папку для чата на сайте, установил .htaccess (AddDefaultCharset windows-1251).
Все срабатывает, но... только после перезагрузки страницы чата и совсем нет заглавных букв.
Комбинация :
CharsetDisable on
CharsetDefault windows-1251
CharsetSourceEnc windows-1251
AddDefaultCharset windows-1251
Выдает ошибку 500.
Если создать папку с чатом на хостинге, - это будет, грубо говоря, еще один сайт чисто для чата.
Есть ли еще варианты?
По-поводу отсутствия заглавных букв - значит не все правильно настроено на хостинге - что-то вмешивается в кодировку. Чат абсолютно рабочий и проверен ни один десяток раз.
Варианты есть - можете переписать все под UTF-8 - там ничего сложного нет, исходник открыт - заодно другие страждущие Вам спасибо скажут.
Я и так в свои 60 с лишком (пенсионер, да и еще с недавних пор инвалид 1 группы) стал, как пацан - более менее понял html и css.
Подскажите откуда плясать, буду вникать.
Будьте здоровы.
Что до моего вмешательство в чат и UTF-8 - может быть когда-нибудь у меня руки до него и дойдут, но ничего обещать не могу.
//if ( $name ) $name = cleanName( iconv( "windows-1251", "UTF-8//IGNORE", $name ) );
//else $name = $cookieName;
//if ( $text ) $text = cleanText( iconv( "windows-1251", "UTF-8//IGNORE", $text ) );
у себя так сделал и все ок.
Чат работает прекрасно!
Я пытаюсь внутренний JS-скрипт вынести в наружный файл - не получается, отказывается работать на внешнем подключении.
Подскажите плиз - как сделать.
Всего хорошего вам
Скрипт там заточен работать как inline - в этом весь смысл был, чтобы чат занимал четко один файл.
Но, если очень хочется, то конечно можно вынести его в отдельный файл, как и css.
Для этого надо перенести все содержимое тэга script на строке 708 в отдельный .js, и подключать его надо будет здесь-же, т.е. в 708 строке, ибо там инициализация происходит с условием, что все элементы страницы уже загружены.
Либо можно вместо анонимной функции которая вызывается после интерпретации всего JS в тэге сделать ее именованной, вынести в скрипт, который подключать в head, но не вызывать ее сразу, а только после загрузки всего документа.
Я SEO-шник, у нас привычка выносить весь служебный код наружу. Даже в сжатом виде JS занимает около 9 Кб
Одно плохо - я не силен в JS!
Еще раз большое спасибо - покопаюсь еще раз - я его и подключал в этом месте (вернее на своей странице вставил)
А есть какие-то варианты добавить туда простейшие бб-коды, что бы вставлять картинку, жирным, или подчеркнутым шрифтом? самые простые?
А на данный момент, так как я тоже люблю минимализм, в нем ничего этого нет.
Исходник открыт - можете сами сделать все, что хотите - в том числе и UTF-8.
Есть вопрос один. Ответьте по возможности.
После формы стоят блоки <div class="ad"></div>, <div class="ct"></div>, <div class="cb"></div>
Зачем они были нужны?
Это боковые тени?
Можете удалить их в веб-инструментах в браузере - увидите что будет.
Сейчас встал вопрос конфиденциальности. Пожалуйста подскажите как сделать чтобы в чате не отображались IP адрес. в Стилях поставить none не вариант.
<span class="id">(' . $id . ')
и удалите его.
А над чем вы еще работаете в данное время?
Залил на сервер (TimeWeb): создал директорию, залил туда php, который скачал отсюда, скопировал и открыл существующий .htaccess, написал строку <AddDefaultCharset windows-125>, а при попытке открыть через браузер получил "Internal Server Error"
Что я делаю не так?
Короче исправил путем исправления header("Content-Type: text/html; charset=cp1251");
Осталось подогнать под себя (размеры, стили и т.п.) и вписать в iframe своих сайтов)
спасибо)))
Не хватает поддержки смайлов (emoji), что не очень критично, и очень не хватает распознование телефонных номеров.
в .htaccess должна быть строчка:
AddDefaultCharset windows-1251
У Вас она написана неверно.
Использовать header для указания кодировки в данном случае - это костыль и так делать не надо.
Во-вторых: Emoji, распознавание телефонов и т.д. доделать элементарно - в чате есть парсинг ссылок - вот по аналогии с ним и сделать. Код открыт - меняйте под себя как нравится.
Дело в том, что код не выводит заглавную (первую букву), то есть, я пишу в сообщении " Привет" и нажимаю отправить, а вместо привет в окне диалога высвечивается "ривет", когда пытаюсь что-то написать на английском, на пример "Hello", то и диалоге выводится полное слово "Hello", то есть, не выводится только заглавная русская буква. Тоже самое и с ником, очень прошу подсказать решение, перебрал варианты но так ничего и не помогло((((
Так что либо неверно настроена кодировка в PHP, либо на сервере, либо на клиенте (если андроид), либо то и другое вместе.
Проблема решена. Использовал header, как другой комментатор.
Например, если положили в корень своего сайта, то попробовать открыть URL вида вашсайт/chat.php, или, если в папку - то вашсайт/папка/chat.php.
Если открываться не будет - значит либо надо доступ до него прописать, либо изменить rewrite-правила в зависимости от того, какой веб-сервер используется.
setlocale( LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251' ); //Устанавливаем кодировку WIN-1251
if ( $text ) $text = cleanText( iconv( "utf-8", "windows-1251//IGNORE", $text ) );
и изменить
if ( $name ) $name = cleanName( iconv( "utf-8", "windows-1251//IGNORE", $name ) );
else $name = $cookieName;
на
if ( !$name ) $name = $cookieName;
if ( txt !== undefined ) {
msgs.innerHTML = txt;
if ( as.checked ) scrollBottom();
сюда вставить проигрывание звукового сигнала
}
Вставлять надо нечто такое:
( new Audio( "./sound.mp3" ) ).play();
У кого вместо Русского символы, создавайте .htaccess и добавляйте туда PHP_VALUE default_charset windows-1251
P.S. ждём обновлений :)
- теперь чат в UTF-8 - надеюсь, теперь с русским меньше проблем будет
- добавлено отключаемое проигрывание звука при отправке/получении сообщения
Что за ошибка?
-все, что на PHP - вставить в начало нужной Вам страницы до какого-либо не-PHP кода
-стили из head - вставить либо в стили, либо в css этой страницы
-все, что в body - вставить в нужное место этой страницы
Чат написан на XHTML - соответственно, при копировании надо это учитывать, и убирать или оставлять экранирование CDATA.
Ну и подкорректировать стили так, чтобы нормально смотрелось внутри нового дизайна.
Вобщем, стандартные навыки PHP/CSS/HTML, никаких особенностей у данного чата нет.
Ну, либо есть вариант проще - использовать FRAME/IFRAME, но там также надо будет корректировать стили.
Какой браузер, версия?
Что на сервере?
И самое главное - файл с чатом создался на сервере?
Нет - значит дело в этом. Проблемы с правами на запись.
Если да - что в нем?
СпасиБо, за Ваш труд!
Проверил работу с помощью Open Server:
1. Создал каталог CHAT\
2. вложил файл чата в каталог
3. вызвал открытие Каталога -
открылся чат с ошибкой в верхних строках.
4. ввел произвольно текст и отправил сообщение
5. все ошибки исчезли и чат заработал
(как удалось заметить в каталоге чата создался еще один файл: chat.db)
Может быть предложить почитателям Вашего Чата скинуться для небольшого вознаграждения Вашего труда, чтобы был стимул его модернизации?
Ничего в этом крамольного нет, ибо это уже давно приветствуется среди разработчиков.
Есть, все-таки, пожелание дополнить чат в режиме онлайн очищать файл базы при желании. ВЫ писали, что Вас зажигает новизна предложений, а некоторые этим только и живут)))
Есть предложение эти пожелания выстроить сверху-вниз от самых новых и ниже, иначе много строк приходится пролистывать вниз.
Можно ли Вам предложить еще немного своих пожеланий?
С уважением!
Он их закрывал и до последней модификации, но уж больно все просили юникод - он реально стал стандартом де-факто - только по-этому и сделал.
На данный-же момент чат минималистичен и прост - это как раз то, зачем он и был создан.
Захламлять базовую версию чем-то еще совершенно не вижу смысла, что платно, что бесплатно.
Чат с открытым и очень простым исходным кодом - чистый, ванильный JS / CSS / HTML / PHP - никаких специальных билиотек.
Модифицируйте и осуществляйте свои хотелки сами и выкладывайте в сеть - это будет и быстрее и дешевле и полезнее как для общества, так и для ваших скиллов.
С уважением.
Очень сожалею, что пожелания были отождествлены с хотелками. Еще раз простите!
К сожалению, я из той поры, о которой Вы упомянули в пункте меню "О себе" и прекрасно помню
и "Радио РК-86" и "ZX-Scpectrum"....., но не удалось стать программистом, поэтому не обессудьте!
Не хочется засорять Ваш чат и убедительно прошу убрать все мои сообщения, чтобы не раздражать
посетителей этого сайта.
Мира Вам и Удачи!
Вы не вызвали никакого раздражения вообще.
Просто я ответил четко что к чему, чтобы не было больше вопросов.
Если Вы сами - не программист, но хотите получить какие-то реализации хотелок и хотите потратить немного денег - Вы всегда можете разместить заказ на фрилансе, дав, как основу, данный чат.
И все проблемы будут решены.
Прикреплять видео, аудио и т.д. этот чат не умеет и не будет уметь - он предназначен исключительно для обмена текстовой информацией.
Звук можно сменить, изменив строку 737: snd = new Audio( "поставив сюда закодированный в data-url нужный звук в формате mp3" );
1. В метатеге viewport должно быть значение device-width
2. Интерактивные элементы расположены слишком близко
3. Слишком мелкий шрифт
Что можно сказать по этому поводу?
Хотите делать форк - делайте.
Там все можно CSS-ом разнести через media-query, не лезя в сам HTML.
Ну разве что мету только добавить - придется править HTML.
Только через FTP?
Если вы про сам файл с общением - у меня стоит задача в кроне, которая этот файлик урезает до максимального размера. Но обычно все историю хранят. Скорость от этого не страдает, т.к. файл открывается и отдается только частью (если настроена CHATTRIM). Растет файл медленно - там ведь только HTML, а место под файлы сейчас недорогое - так что в большинстве случаев нет смысла с этим файлом вообще возиться.
Если Вы про пересылаемый кусок данного файла - то, что приходит в бразуер - размер этого куска задается переменной CHATTRIM - укажете в ней 0 (по-умолчанию) - будет пересылаться весь файл, укажите число - будет пересылаться не больше чем указанное число байт.
Тоже достаточно удобно работать.
Да, тоже моя, как и весь дизайн вместе с движком.
Но тут тема про чат - хотите уточнить что-то еще - пишите на мыло.
А как убрать авто копирование всего текста написанного и отправленного сообщения мышкой в нижнее поле ввода? Чтоб копировало только имя или вообще не копировало бы! СПС за отличный мини чатик!).
Ну а если хочется только имя, то всю строку 1236 нужно заменить на: text.value += ">" + name;
Все ширины и высоты настраиваются в CSS-стилях основного файла в тэге <style>.
P.S. Понял, что имели ввиду - это настраивается как раз теми самыми CSS-стилями. Но объяснять как это работает и как это сделать - не смогу - нет ни времени, ни желания.
Можете обратиться к любому WEB-верстальщику и он Вам сделает.
Если случайно выпадет свободное время, пожалуйста, напишите, что надо изменить в скрипте,
чтобы можно было сделать поле ввода текста сообщения "резиновым". За это многие будут благодарны. надеюсь.
Спасибо!
Что касается ВСЕМ......- время покажет, лично я благодарен вдвойне!
Хотелось бы еще узнать Ваше мнение о способе изменения размера окна по вертикали (того же растягивания) с помощью мыши и правого нижнего края самого окна?
И если не обновить страницу, то последующие сообщения уже не прокручивается.
Если же страницу обновить галочка появляется, но снова после отправки сообщения отключается.
Таким образом повторная прокрутка происходит только после обновления страницы.
Это так и должно быть, или это ошибка ?
не все браузеры на мобильном правильно работают с чатом.
Однако, работал и в FF и в Chrome, если поставить галку совместимости с PC. Остальные браузеры не проверял, т.к. эти два самые распространенные.
почти в самом низу кода и будет щщщастье)
Что за header? Как выглядит?
Чат работает у десятков пользователей нормально, значит дело, скорее всего, в вашем хостинге.
Данный чат для этого не предназначен.
Находите того, кто это умеет и он это сделает минут за 30.
респект.
Т.е. все сообщения, которые расположены после этой длины + если обрезка приходится не на конец последнего сообщения, то и оно тоже - будут удалены.
Ограничения по количеству сообщений у чата нет, т.к. цели были другие.
Найти <span class="id">(' . $id . ')</span> и удалить.
Единственное, из-за чего chat.php может выдавать 500 - на хостинге у PHP не включено расширение "mbstring", о чем было написано в статье.
Как я понял, мою ссылку удалили из поста, но надеюсь у себя сохранили.
Будет время и желание -- заходите по ней и напишите, что, на ваш взгляд, реализовано хорошо, а чего не хватает.
Мое мнение вряд-ли имеет значение. Если вам нравится - значит оно уже того стоит.
Ругать или критиковать я не вижу никакого смысла, хотя-бы потому что у вас это уже абсолютно иной программный продукт.
Я создавал этот чат для совершенно другой задачи и требований - мне нужен был быстрый и очень простой чат, как по функционалу, так и по развертке - и он эту задачу полностью решает. И именно по-этому он и представляет собой всего один файл. В этом, собственно, его фишка и его популярность.
Подскажите пожалуйста, можно ли сделать так, чтобы видно было лишь только одно, последнее сообщение?
Можно попробовать поиграться с параметром CHATTRIM, который задает максимальный размер пересылаемого куска чата - точно одно сообщение вряд-ли получится сделать, но, например, первые 5-10 вполне.
Главное помнить, что то, что управляется этим параметром - это вообще весь видимый кусок.
И, грубо говоря, если установить его равным 1-2 сообщениям, то после того как вы отправите свое новое сообщение - вы только его и будете видеть.
Если прямо хочется одно старое и все новые - то нужно модифицировать код, который занимается обрезкой. Он начинается с "if ( CHATTRIM )", там обрезается указанный размер и отбрасывается невалидный кусок, если обрезали не по границе сообщения. Можно вместо этого взять текущий файл с данными и с конца найти последнее старое сообщение и вернуть этот кусок.
Кстати, использую для себя на разных устройствах, когда нужно перекинуть какую-либо ссылку на другой комп.
И все это в - ваших руках - дерзайте.
PHP-файлы предназначены для открытия на сервере, а не в браузере.
// text.focus();
Разделил его по файлам. И внедрил в свой mvc контроллер. Все отлично работает.
В процессе тестирования нашел проблему:
Если в чате только появились первые сообщения и еще есть пустое место в <div id="msgsDialog" class="block"> при клике мышкой мимо сообщения в пустое место в textarea name="text" копируется все содержимое html документа.
В объявлении функции msgs.onclick я исправил проверку if ( s ) на if ( s.className.indexOf( "msg" ) >= 0 ).
"if ..." нужно заменить на "if ( s && s.className.indexOf( "msg" ) >= 0 ) ..." чтобы было ну совсем уж правильно.
Чат на UTF-8 работает без проблем! Но не могу понять как именно на UTF-8 сделать звуковое оповещение о приходе нового сообщения. Может подскажете КАК?
Там есть галочка снизу - "звук" - будет воспроизводится звук при появлении нового сообщения.
Не подскажете, что за чат, в котором мы общаемся?
Это не чатик, это комментарии моего сайта, написанные мной-же )
Я не обижусь. если откажете.
Никнейм не проверяется, как сообщение, короче говоря xss, исправьте, пожалуйста)
Ник экранировался только для того, что бралось из куки.
Спасибо за репорт - обновил все (старую версию тоже, хоть там и не было XSS - чтобы было единообразно).
Т.е. то, что сейчас выложено в секции для скачивания - это самая последняя версия.
Насчет того, что написали - у меня таких задач не стояло, чат делался максимально легким и для своих.
Для отличия одинаковых ников у каждого справа в сообщении есть его IP-адрес.
помню были php чат Дмитрия Бородина, voodoo чат, и т.д , ну это крупные, а такие малявки тоже всегда пользваплись спросом на маленьких сайтах
А вообще, если сферический конь в вакууме, то:
1. зарегистрировать доменное имя
2. настроить доменное имя на IP хостера, подождать регистрации (до 24 часов)
3. создать сайт у хостера
4. настроить сертификат и редирект https, если нужно
5. включить кодировку UTF-8 для сайта
6. включить на сайте PHP версии >= 5
7. включить в PHP расширение mbstring
8. залить файл чата в корневую директорию сайта и переименовать его в index.php
9. при необходимости настроить .htaccess если веб-сервер Apache или nginx.conf, если Nginx, чтобы они открывали по-умолчанию index.php через интерпретатор PHP
После выполнения всех этих пунктов, чат должен стать доступен по доменному имени из п1.
Если-же требуется именно ВСТРОИТЬ чат в движок сайта - то тут только спец вам в помощь.
В файле refresh.php просто кусок кода, который динамически обновляется каждую секунду. И это раздражает если честно) Для пользователя это будет заметно если он захочет выделить текст. Выделение будет сбрасываться т.к. блок обновляется) Не могу пока придумать как это обойти...
Что до чата - он смотрит, был ли обновлен файл (по дате последнего изменения) - и только если был, он подгружает его.
Здесь тема по чату, давайте оффтопить не будем.
И консультации по программированию - извините - я тоже не оказываю.
Ищите "date( "d.m.Y H:i:s" )" - именно это отвечает за формирование времени в сообщении.
Однако данная инструкция формирует время с тем часовым поясом, который указан в конфигурации сервера PHP. И, по идее, если нужен другой часовой пояс, то надо не в скрипте менять что-то, а в настройках сервера, т.к. это правильный путь.
date_default_timezone_set ("UTC"); // Устанавливаем часовой пояс по Гринвичу
$time = time(); // Вот это значение отправляем в базу
$offset = 5; // Допустим, у пользователя смещение относительно Гринвича составляет +5 часов
$time += 5 * 3600; // Добавляем 5 часов к времени по Гринвичу
//заменяем date("d.m.Y H:i:s") на date("d.m.Y H:i:s", $time);
// Добавлением переменной $time выводим время пользователя, согласно его часовому поясу
Может коряво получилось т.к. я не программист, но работает.
Спасибо за код еще раз!
//это тот пояс, в котором будет жить сервер (локальное время)
//ставить надо в самом начале скрипта, если не хочется настраивать на сервере
date_default_timezone_set("Europe/Moscow");
time() + date( "Z" ); //это вернет UTS для локального времени
time(); //это вернет UTS для GMT, или так называемый UTC
echo( gmdate( "d.m.Y H:i:s" ) ); //это напечатает GMT-дату и время
echo( date( "d.m.Y H:i:s" ) ); //это напечатает локальную дату и время
Возможно что-то с браузером или дополнениями к нему.
Если браузер мобильный - там вообще много чего может быть, ибо этот чат не для мобильных устройств.
почти в самом низу чата и будет щщщастье)
Скажите, пожалуйста, а как можно скрыть чат от посторонних глаз?
Т.е., если использовать для личной переписки двух человек.
Чтобы её не видели:
- нечайно зашедшие другие пользователи (запаролить файл? подскажете как?)
- любопытные админы хостера (это, наверное, невозможно)
- чтобы страница не выскочила в seo поиске (это примерно помню как закомментировать)
Для Apache это можно сделать через .htaccess, лежащий в каталоге с чатом, добавив нечто такое:
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /путь до файла с паролями/.htpasswd
Require valid-user
Аналогичное можно сделать и для других вебсерверов - nginx, lighthttpd и т.д. - читать гугл.
От админов хостера можно скрыться добавив шифрование сообщений на клиенте/сервере - но это достаточно сложная, хотя и решаемая задача.
Чтобы страница не выскочила в seo поиске - закройте ее паролем, или используйте robots.txt
Кроме того, в самом скрипте есть переменная, отвечающая за максимальную длину этого файла - в этом случае файл будет уменьшаться автоматически, теряя самые старые сообщения.
Пробывал но при отправке выдаёт ошибку сервера 400
Если при них 400 ошибка выдается - надо смотреть настройки сервера и PHP - правильно-ли сконфигурированы они на UTF-8.
А вот если нужно, чтобы это был элемент управления, чтобы там можно было выбрать смайл и тд - это надо отдельно делать. Тут Вам либо самому разбираться, либо просить того, кто в этом разбирается.
У меня пока такого в планах на этот чат не предвидится - я текстовыми смайлами пользуюсь всегда.
И это никуда выводиться на экран не должно, ибо это отдельный POST-запрос.
Единственное, что могу предложить - если это таки появляется на экране - откройте после этого консоль разработчика и гляньте нет ли там каких ошибок.
Ибо у большинства все нормально работает - значит конкретно ваш сетап чем-то отличается.
Что бы я изменил/добавил:
1. Ширина, на высоком разрешении нечто узенькое в центре экрана, может можно вычислять и подстраиваться под браузер? Мне кажется #wrapper {width: 80%; - даже так гораздо лучше (имхо).
2. Возможность постить файлы и картинки. Файлики отображались бы в строке иконками (кликнул - загрузил), а картинки миниатюрами (кликнул - посмотрел, там ссылка на загрузку). Это серьезный вклад в обмен данными между собеседниками.
3. Для первого поста или длительного перерыва простенькую (как у Вас) капчу
4. Автоматом при длительном отсутствии активности (три дня? потеря мысли или другая тема/собеседник) перемещать все в хистори (по времени последней записи в лог или доп. кнопкой?). Соответственно добавить ссылку или кнопку читать (искать) в хистори. Ну и поменять местами имя с датой на дату ("Y/m/d H:i:s" - даже так проще сортировать в поиске, если что) с именем
Вы всегда можете реализовать все свои хотелки - код чата открытый и очень простой.
Я же, по описанным выше причинам, всего этого не делаю. Это максимально простой текстовый чат без наворотов.
Стиль сами можете подогнать под себя - исходники простые и понятно структурированные.
Помогите пожалуйста. Подключил к чату смайлы.
Ввожу текст в <div id="sendDialog">, передаю в <div id="sendDialog"> смайл, отображается правильно - как картинка, но если по кнопке "отправить" в <div id="msgsContent"> отображается только текст без смайла.
В блоке php для переменной $msg сделал </div><textarea name="text" id="txt_txt1">' . $text . '</textarea></div>' . Все равно не помогает.
Если отправить только смайл без текста, то "ошибка сервера 400". Если в chat.db вписать код смайла и обновить страницу чата, то смайл отображается как картинка вместе с основным текстом. Если я правильно понимаю, то сначала пишется в chat.db, а уже оттуда читается в поле чата, только я очень хилый кодер на js и не могу понять, где происходит запись в файл chat.db.
Может есть возможность какую нибудь идею подкинуть как обойти эту ошибку 400. Похоже, что это с php связано.
В чате введенный текст очищается в фии cleanText, смайлы это составные UTF-8 последовательности - может быть в этом дело.
Файл чата пишется строкой "file_put_contents( DBFILE, $msg, FILE_APPEND );".
Остальное сами пожалуйста - чат задумывался максимально простым, без каких-либо смайлов и тд. и таким и останется.
Warning: filemtime() [function.filemtime]: stat failed for . . . . . www/chat.db in . . . . . . www/chat-0.php on line 149
Можете подсказать что сделать?
Как убрать эту надпись?
Хорошего дня!
Всё заработало, спасибо!
Это веб-чат, он работает в браузере.
Про какие приложения еще идет речь?
Если Вы его хотите встроить в приложение через WebView - он так и останется веб-чатом - по-этому работа его всецело будет зависеть от настроек веб-сервера, к которому он будет обращаться. Встроите в 3 приложения, при этом указав один вебсервер - чаты всех 3 приложений будут общаться друг с другом.
звук есть))) просто на устройстве был выключен)))
через пару минут, когда экран уже заблокировался, сообщения не слышны, и по чату бегут такие полосочки если разблокировать посмотреть, то есть чат засыпает через какое-то время, если ты не в браузере
Во-первых - чат не рассчитан на мобилки.
Во-вторых - андроид (иногда и надстройка на нем типа MIUI) агрессивно уводит процессы в фоне в спячку (в тч страницы браузера) чтобы не жрало батарею - и это правильно.
В-третьих - исходники открыты - вы можете модернизировать их так, как вам необходимо.
Я же здесь держу чат в максимально простом и универсальном состоянии, без ненужных для его работы наворотов.
Разбирайтесь со своим хостингом и настройками PHP (проверяйте права на файлы и тд) - чат тут абсолютно не при чем.
Обновления будут тогда, когда в них реально появится необходимость.
На данный момент чат польностью работоспсобен в FF/Chrome и форках на их основе.
Никакого доп.функционала не планируется.
На Ubuntu 16 работает без проблем.
Пока разбираемся...
По-умолчанию это файл "chat.db", который лежит в тойже папке, что и чат.
Чат очень понравился.
Если в никнейме - то так и должно быть - там разрешены только пробелы, русские и английские буквы и цифры. Хочется туда что-то еще - модифицируйте функцию cleanName - именно она ответственна за очистку.