PHP: Счетчик посещений

Доступ к файлам из РНР является довольно простой задачей. Теперь, когда все необходимые отдельные функции рассмотрены, самое время написать сценарий для счетчика посещений, о котором шла речь в начале этой главы.

Этот сценарий состоит из единственной функции, retrieveCount (), которая при каждом своем вызове прибавляет единицу к счетчику, хранящемуся в текстовом файле, и возвращает клиенту новое значение счетчика или, в случае ошибки, значение false. Ей передается один параметр — имя файла, в котором хранится счетчик посещений. Давайте посмотрим внимательнее на эту функцию и на ее использование.

Простой счетчик посещений, хранящийся в текстовом файле:

<?php
function retrieveCount($hitfile) {
/* Попытка открыть существующий файл со счетчиком посещений
и либо получить из него счетчик, либо, если файл не существует,
открыть новый файл и установить счетчик $count равным нулю. */
$fr = @fopen($hitfile, 'г1
);
if(!$fr) {
$count = 0;
} else {
$count = fgets($fr, 4096);
fclose($fr);
}
/* Сейчас, когда счетчик $count определен, повторно откроем
файл и запишем в него новое значение счетчика. */
$fr = @fopen($hitfile, 'w');
if(!$fr) return false;
$count++;
if(@fputs($fr, $count) == -1) return false;
fclose($fr) ;
return $count;
)
$count = retrieveCount('hitcount.dat') ;
if($count !== false) {
echo "Эту страницу посетили $count pa3<BR>";
} else {
echo "Произошла ошибка.<BR>";
}
?>

При более близком рассмотрении функции retrieveCount () видно, что код для чтения/записи простого текстового файла оказался сложнее, чем ожидалось! Поскольку заранее неизвестно, существует ли в действительности файл, чье имя передано функции retrieveCount (), каждый раз при использовании функции работы с файлами возвращаемое значение должно обязательно проверяться на существование данного файла.

Первый шаг сценария — попытка открыть файл в режиме чтения. Если этот вызов fopen () заканчивается успешно, следующей вызывается функция fgets (),
которая читает текущий счетчик из текстового файла, после чего этот файл закрывается. Если же при вызове fopen () возникает ошибка, то предполагается, что файл со счетчиком не существует, и поэтому $count считается равным нулю.

После того как значение $count вычислено, этот файл открывается повторно (на этот раз в режиме записи) и в него с помощью функции fputs () записывается новое значение счетчика $count (переписывая, таким образом, предыдущее значение). Затем проверятся успешность выполнения функции fputs (), файл закрывается, и на этом выполнение функции retrieveCount () завершается возвратом значения $count.

Обратите внимание на использование операции сравнения с учетом типов с возвращаемым из функции retrieveCount () значением. Поскольку при стандартной операции сравнения значение нуль преобразуется в значение false, то чтобы гарантировать, что сообщение об ошибке будет выводиться
только в случае, если функция вернет false, а не нуль, необходимо использовать операцию строгого сравнения !==.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...