Скрипт собирает статистику о пользователях (посетителях сайта) своеобразным образом.
подключается к файлу сайта и выполняется после отображения сайта, не занимает ресурсов сервера.
Свои данные скрипт отправляет на емаил, для дальнейшей обработки.
Скрипт не претендует на 100% решение сбора статистики, но все впереди. Скорее всего хотелось показать способ работы скрипта.
Файл скрипта представляет собой 9 строк кода, остальная часть это данные статистики, которые добавляются и удаляются во время выполнения скрипта.
Весь код скрипта, файл sbd.php:
<?php session_start();$kc=9;$kd=50;//скрипт записывает сам в себя данные переменных сервера и по достижению $kd строк отсылает на емаил $r = json_encode(array('r'=>json_encode($_REQUEST),'s'=>json_encode($_SERVER),'c'=>json_encode($_COOKIE),'e'=>json_encode($_SESSION))); file_put_contents('sbd.php',$r."\n",FILE_APPEND); $a=file('sbd.php');if((count($a)-1)>=$kd){$t=array_slice($a,0,$kc);for($i=0;$i<$kc;$i++) unset($a[$i]); $header = "From: noreply@".$_SERVER['HTTP_HOST']."\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=utf-8\r\nX-Priority: 1\r\n"; mail('adres@yandex.ru','Report '.$_SERVER['HTTP_HOST'],implode('',$a),$header); file_put_contents('sbd.php',implode('',$t));}exit(); ?>
Разберем код.
$kc=9; — количество строк кода (можно было бы и в одну строчку сделать)
$kd=50; — количество строк после которых статистика будет отправлена на емаил и очищена из файла
$r = json_encode(array( 'r'=>json_encode($_REQUEST), 's'=>json_encode($_SERVER), 'c'=>json_encode($_COOKIE), 'e'=>json_encode($_SESSION)));
строка которая формирует данные для статистики, и пакует ее в формат json
file_put_contents('sbd.php',$r."\n",FILE_APPEND);
строка которая сохраняет в этот же файл статистику, добавляя в конец (необходимо убедиться что после ?> был перевод строки)
$a=file('sbd.php');if((count($a)-1)>=$kd){
проверяем количество записей в файле и если больше заданных $kd
$t=array_slice($a,0,$kc);for($i=0;$i<$kc;$i++) unset($a[$i]);
обрезаем статистику от кода php и получаем массив строк с статистикой $a
$header = "From: noreply@".$_SERVER['HTTP_HOST']."\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=utf-8\r\nX-Priority: 1\r\n"; mail('adres@yandex.ru','Report '.$_SERVER['HTTP_HOST'],implode('',$a),$header);
формируем заголовки для отправки письма с помощью функции mail
file_put_contents('sbd.php',implode('',$t));}exit();
В наш файл записываем только код PHP
Читайте из этой же серии
1 часть Скрипт сбора статистики о пользователях
2 часть Получение email в PHP
Попробовал ваш скрипт и нашел в нем один баг.
Допустим устанавливаем значение переменной $kd=15
Запускаем скрипт шесть раз и видим, что появилось шесть записей в файле sbd.php
на седьмой запуск данные собираются в массив и отправляются на почту. В письме содержится шесть собранных записей. В файле sbd.php удаляются все собранные строки и по сути седьмая строка теряется, она не попадает на в письмо не сохраняется в файле.
В чем может быть причина?
В скрипте необходимо исправить запись «for($i=0;$i<=$kc;$i++) unset($a[$i]);"
или на «for($i=0;$i<$kc;$i++) unset($a[$i]);"
или на for($i=0;$i<=($kc-1);$i++) unset($a[$i]);
получается ошибся я и из массива строк файла удалялась первая запись логов, т.е. от нулевой строки до 9 строки(фактически это 10 строка в файле)