Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Счетчик онлайна на php с глюком, Счетчик работает, но есть ошибка
Dr.And  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 32652
На форуме: 12 лет, 9 месяцев, 14 дней
Карма:




Помогите пожалуйста, кто силен в 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"
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alexbel2404  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1084
Пользователь №: 28824
На форуме: 13 лет, 8 месяцев, 2 дня
Карма: 55




а ошибка какая?)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alexbel2404  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1084
Пользователь №: 28824
На форуме: 13 лет, 8 месяцев, 2 дня
Карма: 55




Скорее всего $ok при каком-то условии не иницилизируется.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dr.And  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 32652
На форуме: 12 лет, 9 месяцев, 14 дней
Карма:




Визуально - ошибка никак о себе не дает знать. На сайте в логах пишет, что в 14 строчке ошибка, неопределенная переменная.
Возможно это и есть та самая $ok...
Пример записи:
[Wed Jun 06 00:01:14 2012] [error] [client 62.109.7.xxx] PHP Notice:  Undefined variable: ok in /home/dr.and/data/www/xxx.com/counters/co_online.php 
on line 14, referer: http://www.xxx.com/page/aaaaa.php



Это сообщение отредактировал Dr.And - 8.06.2012 - 00:04
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dr.And  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 32652
На форуме: 12 лет, 9 месяцев, 14 дней
Карма:




На другом форуме посоветовали написать в самом начале скрипта $ok=''; - помогло. Счетчик работает без скачков. Логи позже посмотрю.

Это сообщение отредактировал Dr.And - 8.06.2012 - 08:43
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dr.And  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 4
Пользователь №: 32652
На форуме: 12 лет, 9 месяцев, 14 дней
Карма:




Сегодня посмотрел логи - появилась ошибка в 16 строке )))))
Опять неопределенная переменная $online_array.
[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

Сделал по аналогии, в начале скрипта объявил $online_array='';
В логах полезли ошибки:
[Fri Jun 08 08:30:11 2012] [error] [client 62.109.7.ххх] PHP Warning:  Invalid argument supplied for foreach() 
in /home/dr.and/data/www/ххх.com/counters/co_online.php on line 13, referer: http://www.xxx.com/.../page.php
[Fri Jun 08 08:30:11 2012] [error] [client 62.109.7.ххх] PHP Warning:  Invalid argument supplied for foreach() 
in /home/dr.and/data/www/ххх.com/counters/co_online.php on line 14, referer: http://www.xxx.com/.../page.php


Это сообщение отредактировал Dr.And - 8.06.2012 - 08:45
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_Alexandr  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









нужно написать не $online_array = ''; а $online_array = array().
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса