Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Cannot modify header information - headers already sent by
 
 автор: Eric   (08.03.2007 в 19:19)   письмо автору
 
 

Ребят, а как этот скрипт(определяет кто в онлайне на сайте) заставить работать на бесплатном агавовском скрипте.
Файл - online.php. Вот содержание:

<?php
  
//Количество минут, в течении которых пользователи считаются находящимися "он-лайн"
  
$time=5;
  
  
//Область данных, следующая строчка ОБЯЗАТЕЛЬНО должна быть шестой в этом файле
$online='a:1:{i:0;s:43:"95acd2b64543208416fb973d7460f1d1|1131440177";}';
  
  
$online=unserialize($online);    


//Установка кодировки windows-1251
header('Content-Type: text/html; charset=windows-1251');  

    
//Окончания "числительных"
    
$users = array('пользователей''пользователь''пользователя');
  
  
//Антикеширование
  
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
  
header('Cache-Control: no-store, no-cache, must-revalidate'); 
  
header('Cache-Control: post-check=0, pre-check=0'FALSE); 
  
header('Pragma: no-cache');
  
  
//Определение внешнего и внутреннего ip-адресов
  
$ip[0]=$_SERVER['REMOTE_ADDR'];
  if(isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) 
    
$ip[1]=$_SERVER['HTTP_X_FORWARDED_FOR'];  
  else
    
$ip[1]='';
  
  
//Получаем данные броузера
  
$browser=$_SERVER['HTTP_USER_AGENT'];
  
  
//Получаем хеш из данных о пользователе
  
$user=md5($ip[0].$ip[1].$browser); 
  
  
//Приделываем к хешу время последней активности
  
$str=$user."|".time();  
  
  
  
  
//В цикле "убираем" всех устаревших пользователей
  
for($i=0;$i<count($online);$i++)
  {
      
$tmp=explode("|",$online[$i]);
      
$online2[$i]=$tmp[0];
      
      
$t=@$tmp[1];      
      if(
$t<time()-$time*60)
      {
        unset(
$online[$i]);
      }
      else
      {
          if(
$online2[$i]!=$user)
          {        
            
$online3[]=$online[$i];
          }
      }     
  }
  
  
$online=@$online3;  
  
$online[]=$str;           
  
  
  
  
//Выводим количество
  
$count=count($online);
  echo 
'document.write("'.$count.'");'."\n";


  
//Выводим слово "пользовател.." с нужным окончанием
  
if(isset($_GET['usr']))
  {    
    
$index $count 100;
    if (
$index >=11 && $index <= 14
        
$index 0;
    else 
        
$index = ($index %= 10) < ? ($index $index): 0;
    
    echo 
'document.write(" '.$users[$index].'");'."\n";        
    }
  
  
//Читаем этот файл и обновляем шестую строчку
  
$file=file("online.php");
  
$file[5]='$online=\''.serialize($online).'\''.";\n";
  
  
//Проверяем на доступность для записи и, в случае успеха, записываем обновленные данные.
  
if(is_writable("online.php"))
  {
      
$f=fopen("online.php","w");
      
flock($f,LOCK_EX);
      
fwrite($f,join("",$file));
      
flock($f,LOCK_UN);
      
fclose($f);
  }
  else
  {
    echo 
'document.write("Check file permissions!");'."\n";    
  }
   
       
?>


Обратите внимание, не помогает вставка такая:
<script src="./online.php "></script>

такая:
<script src="./online.php?usr=true"></script>

такая:
<? require ('./online.php'?>

и вот такая:
<? include("./online.php"); ?>


Такой простой скрипт и не работает на этом сервере :((
Помогите, please///

   
 
 автор: Poison   (08.03.2007 в 19:33)   письмо автору
 
   для: Eric   (08.03.2007 в 19:19)
 

А ошибки выдает?

   
 
 автор: Eric   (08.03.2007 в 21:00)   письмо автору
 
   для: Poison   (08.03.2007 в 19:33)
 

Конечно выдает. Если вставлять в html страницу, то выдает синтаксическую ошибку, но это присуще этому серваку, т.к. он вставляет свой баннер, из-за него(скрипта баннера) случается такая проблема.
А если инкюдить в php страницу (<? require ('online.php') ?>), то:

Warning: Cannot modify header information - headers already sent by (output started at /home/f/ftd.h16.ru/WWW/online/example.php:10) in /home/f/ftd.h16.ru/WWW/online/online.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at /home/f/ftd.h16.ru/WWW/online/example.php:10) in /home/f/ftd.h16.ru/WWW/online/online.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /home/f/ftd.h16.ru/WWW/online/example.php:10) in /home/f/ftd.h16.ru/WWW/online/online.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /home/f/ftd.h16.ru/WWW/online/example.php:10) in /home/f/ftd.h16.ru/WWW/online/online.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at /home/f/ftd.h16.ru/WWW/online/example.php:10) in /home/f/ftd.h16.ru/WWW/online/online.php on line 21
document.write("1"); 

Число 1 в скобках (document.write("1"); ), это и есть количество он-лайн юзеров. Оно мне и нужно!!!! На моем сайте много подобных вставок различных скриптов, но вот иногда некоторые скрипты не вставляются, я подумал мож че в скрипте изменить нужно???

   
 
 автор: cheops   (09.03.2007 в 12:17)   письмо автору
 
   для: Eric   (08.03.2007 в 19:19)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12
http://www.softtime.ru/forum/ead.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
Вы можете также включить буфферизацию, если имеете доступ к конфигурационному файлу php.ini
output_buffering = On


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8484

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования