::: PHP.com.ua - учимся вместе. ::: ::: PHP.com.ua - учимся вместе. :::



 
   - header
  - Я канєшно вибачаюся, ну от вирішив навчи...
  - Трудности с включенным safe mode, не вид...
  - Поможіть з установкою локальки
  - Помогите с функцией utf2win1251
  - Вывод окна предупреждения
  - допоможіть нічого не розумію


Главная
Новости
Статьи
Шпаргалки
Файлы
О проекте
Форум
Футболки


FREEhost.com.ua - купил хостинг 10 у.е. на Begun в подарок.

iName.com.ua - регистрация доменных имен и хороший хостинг.

Библиотека программиста - нужный вам исходник или документация по необходимому для вас языку программирования.

Designclub - Клуб дизайнеров Украины.

Регистрация доменов
Хостинг

 HowtoForge.ORG.UA - Это первый Украинский ресурс развития open source программного обеспечения


Путь: Шпаргалки

Шпаргалки

Автор: - 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.
Контакты Design by webFaction Ukrainian PHP Group 2004-2005