Как быть, если access-логи web-сервера недоступны, а необходимо знать в каком количестве и куда документы скачиваются. При этом движок сайта не использует mod_rewrite, для переопределения страниц. Решить проблему поможет наше блюдо. Оно быстро в приготовлении, и не требует ничего такого, что трудно достать.
Для приготовления нашего блюда понадобится:
Создадим в корне сайта (как правило, это каталог www или htdocs) подкаталог logs. Установите ему права достаточные, для того, чтобы web-сервер смог в неё писать (например 666 или rw-rw-rw-).
Создадим в корне сайта php-скрипт следующего содержания:
<?php
// Если нет нужной нам для определения mime-type функции,
// то придётся изобрести мальнький велосипедик
if ( ! function_exists ( "mime_content_type " ) )
{
function mime_content_type ( $f )
{
return trim ( exec ("file -bi " . escapeshellarg ( $f ) ) ) ;
}
}
function write_log(){
// Функция, пишущая логи доступа в файл
$log_string=
"".date("Y-m-d H:i:s"). // Дата доступа к файлу
"\t".$_SERVER["REQUEST_URI"]. // IP с которого загружали документ
"\t".$_SERVER["REMOTE_ADDR"]. // IP с которого загружали документ
"\t".$_SERVER["HTTP_REFERER"].// REFERER откуда пришли
"\r\n";
// Открываем файл для добавления и пишем туда лог
$fd=fopen($_SERVER["DOCUMENT_ROOT"]."/tmp/".date("Y-m-d").".log","a");
fwrite($fd,$log_string);
fclose($fd);
}
function error404(){
header("HTTP/1.x 404 Not Found");
echo "Not Found";
die;
}
function error403(){
header("HTTP/1.x 403 Forbidden");
echo "Forbidden";
die;
}
// Список возможных индексных файлов
$indexes=array("index.php","index.html","index.htm","index.shtml","index.phtml");
// Пишем данные в лог
write_log();
// Определяем путь запрашиваемо файла в ФС, отсекая QUERY_STRING
$filename=$_SERVER["DOCUMENT_ROOT"].preg_replace("/^(.*?)\?.*$/","$1",$_SERVER["REQUEST_URI"]);
// Признак 403-й
$forbidden=1;
// Если имя в ФС имеет место, разбираемся, что за имя
if(file_exists($filename)){
// Если это не обычный файл (каталог), определяем есть ли там индексный файл
if(!is_file($filename)){
foreach($indexes as $directory_index){
if(!is_file($filename) && file_exists($filename.$directory_index)){
$filename=$filename.$directory_index;
$forbidden=0;
break;
}
}
}else{
$forbidden=0;
}
}else{
// Вызов 404-й
error404();
}
if($forbidden){
// Вызов 403-й
error403();
}
// Если запрашиваемый пользователем файл - скрипт, php, то
// Подключаем его к этому, и тем самым обеспечиваем выполнение
if(preg_match("/^.*php(\?.*){0,1}$/",$filename)){
include($filename);
die;
}else{
// Иначе выводим содержимое запрашиваемого файла
$filecontent=implode("",file($filename));
header("Content-type: ".mime_content_type($filename)."");
echo $filecontent;
die;
}
?>
Создадим файл .htaccess в корне сайта и добавим туда следующие строки:
RewriteEngine On # Включаем mod_rewrite RewriteRule ^(.*)$ logger.php [L,QSA] # Все запросы направляем в logger.php
Бюдо готово. Приятного аппетита. Более опытный повар может внести в него свои оттенки вкуса, организовав, к примеру, запись логов в БД.