Dr.And
Новичок
Помогите пожалуйста, кто силен в php, подскажите, что в коде не так.
Я нашел готовое решение - Счетчик онлайна на php без использования БД.
Работает более-менее нормально, но в логах на сервере видна ошибка в 16 строчке.
Вот весь код:
Для работы счетчика естественно должен быть еще файл "online.dat"
Пробовал в начале скрипта прописать $online_array=array(); - в ответ новая ошибка в логах:
Можно было бы плюнуть на эти нотисы, но при онлайне на странице 70-80 и более заметны скачки в показателях счетчика.
Примерно так: 82 - 83 - 65 - 83 - 81 - 82 - 67 - 81 - 80
Я нашел готовое решение - Счетчик онлайна на php без использования БД.
Работает более-менее нормально, но в логах на сервере видна ошибка в 16 строчке.
Код:
[Fri Jun 08 07:18:01 2012] [error] [client 62.109.7.ххх] PHP Notice: Undefined variable: online_array
in /home/dr.and/data/www/ххх.com/counters/co_online.php on line 16, referer: http://www.xxx.com/.../page.php
Код:
<?php
$data="online.dat";
$time=time(); $past_time=time()-60;
header('Content-Type: text/html; charset=windows-1251');
$readdata=fopen($data,"r") or die("Не возможно открыть файл $data");
$data_array=file($data); fclose($readdata);
if (getenv('HTTP_X_FORWARDED_FOR')) $user = getenv('HTTP_X_FORWARDED_FOR');
else $user = getenv('REMOTE_ADDR'); $d=count($data_array);
for($i=0;$i<$d;$i++){list($live_user,$last_time)=explode("::","$data_array[$i]");
if($live_user!=""&&$last_time!=""): if($last_time<$past_time): $live_user=""; $last_time=""; endif;
if($live_user!=""&&$last_time!=""){ if($user==$live_user){ $online_array[]="$user::$time\r\n";}
else $online_array[]="$live_user::$last_time";} endif;}
if(isset($online_array)): foreach($online_array as $i=>$str){ if($str=="$user::$time\r\n"){ $ok=$i; break;}}
foreach($online_array as $j=>$str){ if($ok==$j) { $online_array[$ok]="$user::$time\r\n"; break;}} endif;
$writedata=fopen($data,"w") or die("Не возможно открыть файл $data"); flock($writedata,2);
if($online_array=="") $online_array[]="$user::$time\r\n"; foreach($online_array as $str)
fputs($writedata,"$str"); flock($writedata,3); fclose($writedata);
$readdata=fopen($data,"r") or die("Не возможно открыть файл $data"); $data_array=file($data); fclose($readdata);
$online=count($data_array); echo "Сейчас на сайте: ".$online." чел.";
?>
Пробовал в начале скрипта прописать $online_array=array(); - в ответ новая ошибка в логах:
Код:
[Fri Jun 08 09:56:37 2012] [error] [client 62.109.7.xxx] PHP Notice: Undefined offset: 1
in /home/dr.and/data/www/xxx.com/counters/co_online.php on line 9, referer: http://www.xxx.com/.../page.php
Примерно так: 82 - 83 - 65 - 83 - 81 - 82 - 67 - 81 - 80