[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Счетчик онлайна на php с глюком
Dr.And
Помогите пожалуйста, кто силен в php, подскажите, что в коде не так.
Я нашел готовое решение - Счетчик онлайна на php без использования БД.
Работает вроде нормально, но в логах на сервере видна ошибка в 14 строчке.
foreach($online_array as $j=>$str){ if($ok==$j) { $online_array[$ok]="$user::$time\r\n"; break;}} endif;

Вот весь код:
<?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.dat"
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.