Октябрь 21, 2005
Триада PHP & MySQL & gd library - Сервис счетчиков обращений (Часть 1)
Php - (Hypertext Preprocessor) - платформо-независимый язык для динамического наполнения WEB-сайта.
Тем не менее, он позволяет динамически генерировать не только HTML-документы, но и графические изображения в формате gif. В статье рассмотрены вопросы обработки параметров get-запроса, доступа к базе MySQL и генерации gif-рисунков на практическом примере.
Когда у вас будет свой сайт вы безусловно захотите вести статистику посещений. Если вы предоставляете место и траффик для бесплатного размешения страниц и хотите предоставить каждому пользователю неограниченное количество счетчиков, но без права исполнения скриптов, то эта статья для Вас.
Как это работает? Web-мастер помещает на свою страницу ссылку на рисунок. Но не gif или jpeg, а на этот php скрипт. Положим, ссылка на счетчик страницы 'Об авторе', расположенной на моем сайте будет выглядеть так:
<img src="/scripts/counter.php3?SiteID=Vlad&PageID=About">
Здесь SiteID и PageID - так называемые get-параметры, а Vlad и About - их значения. Эти get-параметры идентифицируют счетчик. Скрипт найдет соответсвующую запись в базе, увеличит значение счетчика на еденицу и построит рисунок.
Мы еще не представляем как будет выглядеть все остальное но уже можем обработать get-параметры
$locSiteID = $HTTP_GET_VARS["SiteID"];
$locPageID = $HTTP_GET_VARS["PageID"];
Здесь следует остановиться на важном моменте. Дело в том, что по правилам php имена переменных и get-параметров чувствительны к регистру. Это значит, что если человек напишет ссылку и get-параметры прописными буквами, то наш скрипт не сможет распознать такой запрос. Поэтому я предлагаю не такой изящный, но очень надежный способ интерпреции get-параметров. Состоит он вот в чем: последоватьным перебором всех get-параметров попытаемся найти интересующие нас SiteID и PageID. Причем при поиске используем нечувствительное к регистру сравнение строк:
$locSiteID = "_";
$locPageID = "_";
while (list($key, $val) = each($HTTP_GET_VARS))
{
if (strcmp(strtoupper($key),"SITEID")==0) $locSiteID = "_" . $val;
if (strcmp(strtoupper($key),"PAGEID")==0) $locPageID = "_" . $val;
}
Здесь префикс "_" необходим для MySQL-движка. Далее установим базу счетчиков Counters
mysqladmin create Counters
и создадим в ней таблицу Counters. Таблица как вы наверно уже догадались, состоит из трех полей: SiteID, PageID, CountValue:
Create Table Counters (
SiteID char(120) not null,
PageID char(120) not null,
CountValue int,
index CounterIndex (SiteID,PageID));
продолжение следует...
Автор:
Источник: Гойда Владимир - Web Programmer
Комментарии
- 1. 22.10.05 08:38 От: in
-
Лучше использовать асс. массив $_GET, вместо $HTTP_GET_VARS. И запись короче, и не нужно объявлять его глобальным в функциях. Вообще $HTTP_GET_VARS - устаревшая конструкция:
http://ru3.php.net/reserved.variables
HTTP GET variables: $_GET
Замечание: Introduced in 4.1.0. In earlier versions, use $HTTP_GET_VARS.An associative array of variables passed to the current script via the HTTP GET method. Automatically global in any scope.
This is a 'superglobal', or automatic global, variable. This simply means that it is available in all scopes throughout a script. You don't need to do a global $_GET; to access it within functions or methods, as you do with $HTTP_GET_VARS.
$HTTP_GET_VARS contains the same initial information, but is not an autoglobal. (Note that $HTTP_GET_VARS and $_GET are different variables and that PHP handles them as such)