а ещё в бд писать можно а то мало ли несколько человек одновременно войдёт, а мы flock сделать поленились
Я хочу что бы подсчитывало за сегодня. Всмысле, данные за вчера затирались новыми. Что бы в хостах (к примеру, 15 значений за 29.01. Сегодня 30.01 и надо что бы данных за вчера не было, а считались уже только за сегодня).
И все такие: "Дима рулит аж с 98-ого! Дима рулит аж с 98-ого! Дима, покажи сиськи!!!111 Дима, покажи сиськи!!!111". Спеста - замечательная готовая статистика.
Andrey5555 Да хиты обновлять каждый раз при загрузке страницы. А хосты только для уникальных IP. lexa а) Вы отвечаете за возможные ошибки в данном коде? б) Зачем мне система в несколько десятков (сот) килобайт, если мне нужно подсчитать только хиты/хосты? Не ленитесь - пишите свое
а) А вы отвечаете за ошибки своей ОС и драйверов видео-карты? б) Да затем, что потом вам понадобится ещё куча фич, которые уже есть в Спесте.
Как посчитать хиты простым способом: Создай файл php: PHP: <?php if(!file_exists(date('dmY').'.txt')) {fopen(date('dmY').'.txt','w');} file_put_contents(date('dmY').'.txt',(file_get_contents(date('dmY').'.txt')+1)); ?> и инклюдь его в каждую страницу. Этот скрипт будет записывать количество просмотров в файл с именем дата.txt Думаю, как получить это число из файла а так же автоматически удалять вчерашние файлы ты сообразишь
можно сделать взять статистику с http://liveinternet.ru или http://spylog.ru А через бд можно так: Таблица: [sql]create table visiting_table (id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, ip TINYTEXT NOT NULL, ip_visit int(10), time INT NOT NULL)[/sql] PHP: //функция на получения ip-адреса //--------------------------------------------------------------------------------------------------------------------------- function getIP() { if(getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif(getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } else { $ip = getenv("REMOTE_ADDR"); } return $ip; } //конец функции на получения ip-адреса //--------------------------------------------------------------------------------------------------------------------------- //Занесение посещения //------------------------------------------------------------------------------------------------- $time = date(dmy); $ip = getIP(); $query_proverka = "Select id from visiting_table where time = '$time' and ip = '$ip' limit 1"; $result_visiting = mysql_query($query_proverka, $link) or die('не могу проверить посещения'); if($mas = mysql_fetch_row($result_visiting)) { $id = $mas[0]; $query_update = "update visiting_table set ip_visit = ip_visit + 1 where id = $id"; mysql_query($query_update, $link) or die('не могу увеличить старое посещения'); } else { $query_insert = "INSERT delayed INTO visiting_table (ip, ip_visit, time) VALUES ('$ip','1' ,'$time')"; mysql_query($query_insert, $link) or die('не могу добавить новое посещения'); } //------------------------------------------------------------------------------------------------- //Окончание занесения посещения //И вывод $sql_query = 'Select ip, ip_visit, time from visiting_table'; $result = mysql_query($sql_query, $link) or die('Не могу выполнить запрос!'); while($mas = mysql_fetch_row($result)) { echo "Дата: " . $mas[2] . " - " . $mas[0] . " посещений: " . $mas[1] . "<br>"; } Скрипт очень простенький. Он не выводит не общее количество хитов и хостов, а сколько у каждого посетителя было просмотров. + плюс не стирает вчерашние посещения. Но все это добавить, думаю, не составит труда.
А вот моя реализация того что Andrey5555 хочет, к шастю у меня есть такая реализация, правда я ее немного упростил под его необходимости, т.к. у меня в статистику еше много интерестного пишеться! Пояснять код я думаю не стоит..! ноесли будут вопросы, спрашивайте расскажу..! )) PHP: <?php $date = date("d.m.Y"); $stat_time = date("H:i"); $curent_day = date("d"); $current_stat_file = 'statfile.txt'; $date_of_access = date ("d", filemtime("$current_stat_file")); $temp_file = file("$current_stat_file"); $last_line_onstat = $temp_file[count($temp_file)-1]; $exploded_stat_line = explode("~", $last_line_onstat); if(file_exists($current_stat_file)) { if($date_of_access == $curent_day) { if($exploded_stat_line[3] != $страница к которой обратились) { write_stat($date, $stat_time, $ip, $(страница к которой обратились)); clearstatcache(); } else{} } else { write_stat($date, $stat_time, $ip, $(страница к которой обратились)); clearstatcache(); } } else { $handle = fopen($current_stat_file, 'w'); fclose($handle); write_stat($date, $stat_time, $ip, $(страница к которой обратились)); clearstatcache(); } function write_stat ($date, $time, $ip, $(страница к которой обратились)){ if(empty($date)){$date = "";} if(empty($time)){$time = "";} if(empty($ip)){$ip = "";} if(empty($(страница к которой обратились))){$(страница к которой обратились) = "";} $current_stat = 'statfile.txt'; $stat_data = "$date~$time~$ip~$(страница к которой обратились)\n"; if (is_writable($current_stat)) { if (!$handle = fopen($current_stat, 'ab')) {/*echo "Cannot open file ($current_stat)";*/exit;} if (fwrite($handle, $stat_data) === FALSE) {/*echo "Cannot write to file ($current_stat)";*/exit;} fclose($handle); } else{} } ?>
Всего лишь навсего подстраховка от непонятных или пустых переменных... в целях хтрости не пишу имя своей переменной.. в которой у меня храняться имены страни.. и она собственно нужна для того что я в скрипте не пишу в статистику обновления страниц.. а только если они рефиреться...
По теме: в свое время тоже написал нечто подобное, правда чуть мудренее, а потом узнал какие удобные есть бесплатные системы статистики... например "google analitics" - и успешно забыл про свои извращения! Наверное каждый должен через это пройти... )))
Amiak скрипт - гавно. не имхо. уж извините, что так прямо. файл принято лочить. эт во первых, во вторых в функциях своя область видимости переменных, и нафига было там впендюрить свои выкрутасы с названием пременной не понятно.
ну быть может вы и правы, но на момент написания мне это показалось простым и удобным в исполнении... я не против готовых систем сбора статистики, просто охото свою слобзать, дабы горького опыту набраться!