Blog. Just Blog

Web-мастеру и не только

Полезные решения для Web-мастеров
Web-мастеру и не только - RSS-канал Web-мастеру и не только - Карта сайта

PCL's Mini-Chat 1.0

27.12.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
По просьбам трудящихся выкладываю облегченную версию своего мини-чата. На этом сайте используется похожий скрипт, но он тесно интегрирован с остальными модулями движка и отделить его с сохранением всего функционала не представляется возможным. Скрипт написан практически заново и содержит минимальный набор функций, но его функционал можно легко расширять. Скрипт легко интегрируется в любые сайты, написанные на PHP, генерируемый HTML-код и стили CSS проходят валидацию. Для работы скрипта на сервере требуется PHP версии 4 и выше, база MySQL версии 4 и выше, клиентской части требуется поддержка в браузере пользователя JavaScript. Перед установкой мини-чата и заливкой его на сервер надо настроить данные подключения MySQL-базы (файл chat_engine/chat_config.php):
  1. // Данные для подключения к базе
  2. $chat_config['mysql_name']="test";
  3. $chat_config['mysql_host']="localhost";
  4. $chat_config['mysql_user']="root";
  5. $chat_config['mysql_password']="";
  6. // Таблица мини-чата в базе
  7. $chat_config['mysql_table']="chat_table";
и данные авторизации администратора чата:
  1. // Логин админа чата
  2. $chat_config['admin_login']="admin";
  3. // Пароль = md5(md5('password'))
  4. // по умолчанию пароль "password"
  5. $chat_config['admin_password']="696d29e0940a4957748fe3fc9efd22a3";
Обязательно смените дефолтный логин и пароль! Пароль, естественно, должен храниться только в виде хэша, который можно вычислить любой программой для расчета MD5. Логин и пароль чувствительны к регистру. Настройки самого чата лучше не изменять:
  1. // Количество сообщений, одновременно отображаемых в чате
  2. $chat_config['message_count']=20;
  3. // Максимальное количество символов в сообщении
  4. $chat_config['message_text']=200;
  5. // Максимальное количество символов в имени
  6. $chat_config['message_name']=20;
Для защиты от спама используется скрытое поле с ключевым словом, его значение меняется в настройках. Лучше использовать только латинские буквы и цифры.
  1. // Кодовое слово для защиты от спама
  2. $chat_config['chat_nospam']="NO-MORE-SPAM";
Настройки внешнего вида и размеры окна чата изменяются стилями в файле chat_styles.css, в соответствующих шаблонах в папке chat_template, а иконки на кнопках в папке chat_images. По умолчанию все пути к компонентам мини-чата относительные, кодировка windows-1251.

Читать статью целиком »
Просмотров: 5818 | Комментариев: 16

HTTP-заголовки на PHP: Status или HTTP/1.x?

05.12.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Для управления переадресацией, установки ответов сервера и передачи пользовательских заголовков в PHP используется функция Header. C ее помощью можно, например, установить статус ошибки 404, чтобы сообщить браузеру или поисковой системе, что такой страницы сайта больше не существует. В официальной документации такой случай описывается следующим образом:
  1. <?
  2. header ("HTTP/1.0 404 Not Found");
  3. ?>
Или же, как более корректный вариант:
  1. <?
  2. Header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
  3. ?>
Теперь приступим к тестам. Для проверки поведения скрипта возьмем менеджер закачек Download Master и браузер Firefox с дополнением LiveHTTPHeaders. В качестве тестовых систем для скрипта будут два локальных компьютера и хостинговый сервер. Конфигурация локальных машин: сервер Apache 1.3 и 2.0, PHP версии 5 установлен как CGI/FastCGI, операционная система Windows XP и Windows Seven. Результат плачевный: на обеих системах скрипт рушится с Internal Server Error, а в логе Apache ошибка записана как:

malformed header from script. Bad header=HTTP/1.1 404 Not Found

Хостинговый сервер ведет себя более дружелюбно. Конфигурация: Apache 1.3, PHP версии 4 установлен как CGI, операционная система Linux. При попытке "скачать" скрипт при помощи Download Master, его лог будет вполне ожидаемым, за исключением потери нашего сообщения, что файл не найден Not Found.

Читать статью целиком »
Просмотров: 9482 | Комментариев: 7

Определение браузера посетителя сайта на PHP

16.11.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Для сбора внутренней статистики я написал простую функцию для определения браузеров посетителей сайта. За несколько месяцев активной "дрессировки" в нее были добавлены сигнатуры практически всех популярных браузеров, и вот уже достаточно длительное время она не обновляется. Информация берется из переменной окружения HTTP_USER_AGENT, но так как строка идентификации браузера формируется на стороне пользователя, то она может быть легко подделана. Например, при помощи расширения User Agent Switcher для браузера Firefox или какого-нибудь локального прокси-сервера. Поэтому 100% достоверной эту информацию считать никак нельзя. Но для подавляющего большинства случаев ее будет вполне достаточно. Функция возвращает строку с названием браузера и его версией типа Internet Explorer 6.0, Mozilla Firefox 3.0.14, или же Unknown, если браузер определить не удалось.
  1. //-------------------------------------------------------------------
  2. // Функция определения браузера по данным поля User-Agent
  3. //-------------------------------------------------------------------
  4. function GetUserAgent() {
  5.   // Получить переменную окружения
  6.   $str=getenv('HTTP_USER_AGENT');
  7.   // Попытаться определить известные браузеры по сигнатурам
  8.   if (strpos($str,"Avant Browser",0)!==false) {
  9.     return "Avant Browser";
  10.   }
  11.   elseif (strpos($str,"Acoo Browser",0)!==false) {
  12.     return "Acoo Browser";
  13.   }
  14.   elseif (eregi("Iron/([0-9a-z\.]*)",$str,$pocket)) {
  15.     return "SRWare Iron ".$pocket[1];
  16.   }
  17.   elseif (eregi("Chrome/([0-9a-z\.]*)",$str,$pocket)) {
  18.     return "Google Chrome ".$pocket[1];
  19.   }
  20.   elseif (eregi("(Maxthon|NetCaptor)( [0-9a-z\.]*)?",$str,$pocket)) {
  21.     return $pocket[1].$pocket[2];
  22.   }
  23.   elseif (strpos($str,"MyIE2",0)!==false) {
  24.     return "MyIE2";
  25.   }
  26.   elseif (eregi("(NetFront|K-Meleon|Netscape|Galeon|Epiphany|Konqueror|".
  27.           "Safari|Opera Mini)/([0-9a-z\.]*)",$str,$pocket)) {
  28.     return $pocket[1]." ".$pocket[2];
  29.   }
  30.   elseif (eregi("Opera[/ ]([0-9a-z\.]*)",$str,$pocket)) {
  31.     return "Opera ".$pocket[1];
  32.   }
  33.   elseif (eregi("Orca/([ 0-9a-z\.]*)",$str,$pocket)) {
  34.     return "Orca Browser ".$pocket[1];
  35.   }
  36.   elseif (eregi("(SeaMonkey|Firefox|GranParadiso|Minefield|".
  37.           "Shiretoko)/([0-9a-z\.]*)",$str,$pocket)) {
  38.     return "Mozilla ".$pocket[1]." ".$pocket[2];
  39.   }
  40.   elseif (eregi("rv:([0-9a-z\.]*)",$str,$pocket) &&
  41.           strpos($str,"Mozilla/",0)!==false) {
  42.     return "Mozilla ".$pocket[1];
  43.   }
  44.   elseif (eregi("Lynx/([0-9a-z\.]*)",$str,$pocket)) {
  45.     return "Lynx ".$pocket[1];
  46.   }
  47.   elseif (eregi("MSIE ([0-9a-z\.]*)",$str,$pocket)) {
  48.     return "Internet Explorer ".$pocket[1];
  49.   }
  50.   else {
  51.     // Это какой-то неизвестный браузер
  52.     return "Unknown";
  53.   }
  54. }
Кроме статистики определение браузера посетителя можно использовать для переадресации или выдачи определенных страниц сайта, показа целевых информационных блоков, подгонки стилей или дизайна и т.п. При необходимости функцию можно легко расширить собственными сигнатурами, например, добавить определение поисковых роботов. Для определения браузеров мобильных устройств используется отдельный скрипт.

Просмотров: 18489 | Комментариев: 16

Обработка колесика мыши на JavaScript

12.10.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Сейчас трудно представить мышь без хотя бы одного колесика. Оно используется для прокрутки страницы, для изменения масштаба каких-либо элементов, листания списков и других действий. В основном полная обработка колесика выполняется только в стационарных приложениях, а на сайтах дело ограничивается штатными средствами браузеров. Мы не будем отставать от прогресса, и сегодня разберем как грамотно обрабатывать колесико мыши в современных web-приложениях. Начинаем с теории.


Обработчик события - функция на JavaScript, которая назначается некоторой паре "объект страницы" + "название события". Когда для объекта происходит назначенное событие, выполняются все обработчики, назначенные этому объекту.


Вращение колесика мышки - это тоже событие, значит его тоже можно обработать. Но тут есть особенность: в разных браузерах событие вращения колесика обозначается по-разному. Причину этого я объяснить не могу, впрочем как и многие другие танцы с бубнами для достижения полноценной кроссбраузерности. Сперва напишем функции установки и отмены события для любого элемента страницы, причем сделаем их универсальными, они нам еще не раз пригодятся в будущем. В браузере Internet Explorer обработчики добавляются функцией attachEvent, а названия событий имеют вид 'on'+событие, например, 'onclick', 'onload', 'onmousewheel' и т.д. В браузерах на движке Gecko (Mozilla, Firefox), на движке WebKit (Chrome, Safari) и Opera обработчики добавляются функцией addEventListener, а названия событий никак не меняются, то есть 'scroll', 'keypress', 'mousewheel'. И отдельно в этом списке стоит имя события от колесика мышки для браузеров на движке Gecko, оно единственное и уникальное - 'DOMMouseScroll'. Теперь попробуем все эти данные собрать в кучу.

Читать статью целиком »
Просмотров: 19014 | Комментариев: 8

Определение географического положения по IP-адресу

23.09.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Определение страны и города посетителя сайта по его IP-адресу применяется во многих случаях. Например, автоматическая подстройка языка отображения сайта, более точный таргетинг рекламных или информационных блоков сайта, разграничение доступа к разделам сайта для разных источников трафика, а также для многих других целей. Наиболее полные базы географического положения IP-адресов в настоящее время предоставляет компания MaxMind в своей базе GeoLite City. Бесплатный вариант базы содержит данные с точностью до города, его можно скачать с сайта в бинарном формате (в распакованном виде около 30 мегабайт) и в формате CSV (в распакованном виде около 130 мегабайт). На сайте также можно оформить подписку на коммерческие варианты базы, содержащие данные с точностью до улиц и обновляющиеся еженедельно, но это только если вашему проекту действительно требуется такая точность. Обновления бесплатной базы выходят регулярно, обычно в первых числах каждого месяца. Пример работы скрипта с коммерческой географической базой можно посмотреть на сайте MaxMind. Там же на сайте можно скачать бесплатные базы стран мира, почтовые индексы некоторых стран и много других полезных данных. К сожалению, самые вкусности предоставляются только за деньги.

Доступ к базе осуществляется через API, для некоторых популярных языков программирования они расписаны на сайте. Например, для PHP, кроме собственно самой базы, потребуются еще файлы geoipcity.inc, geoip.inc и geoipregionvars.php. Вызов функции определения положения очень простой:
  1. <?
  2. // Подключить класс для работы с базой
  3. include "geoipcity.inc";
  4. // IP-адрес для проверки
  5. $visitor_ip="70.240.110.17";
  6. // Открыть файл базы
  7. $gi=GeoIP_open("GeoLiteCity.dat"GEOIP_STANDARD);
  8. // Получить данные из базы
  9. $record=GeoIP_record_by_addr($gi,$visitor_ip);
  10. // Вывести данные на экран
  11. print_r($record);
  12. // Закрыть соединение с базой
  13. GeoIP_close($gi);
  14. ?>
Результат работы скрипта будет следующим:

geoiprecord Object (
[country_code] => US
[country_code3] => USA
[country_name] => United States
[region] => TX
[city] => Houston
[postal_code] =>
[latitude] => 29.7755
[longitude] => -95.4152
[area_code] => 713
[dma_code] => 618
[metro_code] => 618
)

Отдельные параметры можно получить из соответствующих полей объекта. Для более оперативного доступа к данным можно хранить базу в памяти целиком (смотрите примеры в описаниях API на офсайте), но такое расточительное использование ресурсов допустимо только на выделенных серверах.

Читать статью целиком »
Просмотров: 15968 | Комментариев: 16

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0025 сек.) / Память: 4.75 Mb
Наверх