|
 |
Путь: Шпаргалки
Шпаргалки
Автор: - Yurik
Дата публикации - 21.01.2007
Просмотров: - 6184
Простой счетчик посещений для статического сайта
Обычным способом счетчика посещений для статического сайта на *.html является размещение картинки на какой-то скрипт (на своем или чужом сервере). Запрос на картинку считается показом страницы.
Предлагается вниманию способ учета посещений сайта собственными скриптовыми средствами, без вмешательства в существующий сайт:
.htaccess
[code]
DirectoryIndex index.html
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# skip grafics, design, archives
RewriteRule \.(gif|png|jpg|jpeg|bmp|tif|rar|zip|gz|bz2|exe|css|js|php)$ - [L]
RewriteRule \.(GIF|PNG|JPG|JPEG|BMP|TIF|RAR|ZIP|GZ|BZ2|EXE|CSS|JS|PHP)$ - [L]
# skip docs
RewriteRule \.(doc|rtf|pdf|xls|txt)$ - [L]
#skip admin
RewriteRule ^images - [L]
RewriteRule ^css - [L]
# redirect other to index.php
RewriteRule ^(.*)$ /index.php
</IfModule>
[/code]
index.php
----------
[php]
<?php
$script=@$_SERVER['REDIRECT_URL'];
$script=str_replace('/', '', $script);
if ($script=='') $script='index.html';
if (!file_exists($script)){
header('HTTP/1.1 404 Not Found');
exit;
}
$ftime=filemtime($script);
if (isset($_SERVER['If-Modified-Since'])) $reqtime = strtotime($_SERVER['If-Modified-Since']);
if ($reqtime==$ftime){
header('HTTP/1.1 304 Not Modified');
exit;
}
$time = gmdate('D, d M Y H:i:s \G\M\T', $ftime);
session_cache_limiter('none'); // не посылать заголовков запрещающих кеширование
session_save_path('/home/user/sessiondata'); // не забудьте создать папку с правами на запись
session_start(); // для отслеживания истории посещения, если счетчик только для хитов, то можно не использовать
@mysql_connect('localhost', 'user', 'pass') or die(mysql_error());
@mysql_select_db('db_stat') or die(mysql_error());
$id_stat=(int) @$_SESSION['id_stat'];
if ($id_stat<1){
$sql="INSERT INTO tbllogs (data, ip, xip, browser) VALUES (NOW(), '";
$sql.=$_SERVER['REMOTE_ADDR'];
$sql.="', '".mysql_escape_string(@$_SERVER['HTTP_X_FORWARDED_FOR']);
$sql.="' ,'".mysql_escape_string(@$_SERVER['HTTP_USER_AGENT']);
$sql.="')";
@mysql_query($sql) or die(mysql_error());
$_SESSION['id_stat']=mysql_insert_id();
}
$sql="UPDATE tbllogs SET views=views+1, history=CONCAT(history,'";
$sql.=mysql_escape_string(@$_SERVER['REQUEST_URI']."\r\n")."') WHERE id=";
$sql.=$_SESSION['id_stat'];
@mysql_query($sql) or die(mysql_error());
header ("Last-Modified: $time");
header ("Content-Length: " . filesize($script));
header ("Content-Type: text/html; charset=windows-1251");
readfile($script);
?>[
/php]
Сама формат логирования посещения можно выбрать на любой вкус, в даном случае запись заводится только на новую сессию, а при существовании сессии только дописывается история посещения и делается инкремент счетчика хитов для этого хоста. Скрипт не поддерживает докачку, но поддерживает "304 Not Modified" по дате изменения.
Обсудить в ФОРУМе - комментариев (0)
Путь: Шпаргалки
Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
|
|