2010-11-16 6 views
0

сегодня у одного из моих друзей возникла проблема с его гостевой книгой. Мы используем небольшую гостевую книгу, ориентированную на php, которая отлично работает, за исключением одного: она достигла предела своих сообщений.session_start() выпуск

Так что я сделал редактирование файла блога и изменил следующий параметр: // Максимальный размер записи, хранящейся в файле данных $ max_record_in_data_file = 1800;

В тот момент, когда я это сделал, что-то пошло не так. Я загрузил файл обратно на сервер и получил следующее:

Внимание: session_start() [function.session-начало]: Не удается отправить куки сессии - заголовки уже прислал (выход начался в E: \ Inetpub \ виртуальных доменов \ trilogianocturnus.com \ httpdocs \ guestbook.php: 1) в E: \ Inetpub \ виртуальных доменов \ trilogianocturnus.com \ httpdocs \ guestbook.php на линии 95

Я не знаю, что это такое, я 'm очень новичок в php, но из того, что я понимаю, это означает, что браузер уже вызывается браузером до session_start

Страница находится по адресу: http://trilogianocturnus.com/guestbook.php

кода перед головкой выглядит следующим образом:

<? 
/*----------------------------------------------------- 
COPYRIGHT NOTICE 
Copyright (c) 2001 - 2008, Ketut Aryadana 
All Rights Reserved 

Script name : ArdGuest 
Version : 1.8 
Website : http://www.promosi-web.com/script/guestbook/ 
Email : [email protected] 
Download URL : 
    - http://www.promosi-web.com/script/guestbook/download/ 
    - http://www.9sites.net/download/ardguest_1.8.zip 

This code is provided As Is with no warranty expressed or implied. 
I am not liable for anything that results from your use of this code. 
------------------------------------------------------*/ 

//--Change the following variables 

//Title of your guestbook 
    $title = "Guestbook Nocturnus"; 
//Change "admin" with your own password. It's required when you delete an entry 
    $admin_password = "***"; 
//Enter your email here 
    $admin_email = "***"; 
//Your website URL 
    $home = "http://www.trilogianocturnus.com/main.html"; 
//Send you an email when someone add your guestbook, YES or NO 
    $notify = "YES"; 
//Your Operating System 
//For Windows/NT user : WIN 
//For Linux/Unix user : UNIX 
    $os = "WIN"; 
//Maximum entry per page when you view your guestbook 
    $max_entry_per_page = 10; 
//Name of file used to store your entry, change it if necessary 
    $data_file = "ardgb18.dat"; 
//Maximum entry stored in data file 
    $max_record_in_data_file = 1800; 
//Maximum entries allowed per session, to prevent multiple entries made by one visitor 
    $max_entry_per_session = 10; 
//Enable Image verification code, set the value to NO if your web server doesn't support GD lib 
    $imgcode = "YES"; 
//Color & font setting 
    $background = "#000"; 
    $table_top = "#000"; 
    $table_content_1a = "#090909"; 
    $table_content_1b = "#000000"; 
    $table_content_2a = "#090909"; 
    $table_content_2b = "#000000"; 
    $table_bottom = "#000"; 
    $table_border = "#1f1f1f"; 
    $title_color = "#9f0000"; 
    $link = "#9f0000"; 
    $visited_link = "#9f0000"; 
    $active_link = "#9f0000"; 
    $font_face = "verdana"; 
    $message_font_face = "arial"; 
    $message_font_size = "2"; 

//-- Don't change bellow this line unless you know what you're doing 

$do = isset($_REQUEST['do']) ? trim($_REQUEST['do']) : ""; 
$id = isset($_GET['id']) ? trim($_GET['id']) : ""; 
$page = isset($_GET['page']) ? $_GET['page'] : 1; 
$self = $_SERVER['PHP_SELF']; 

if (!file_exists($data_file)) { 
    echo "<b>Error !!</b> Can't find data file : $data_file.<br>"; 
exit; 
} else { 
if ($max_record_in_data_file != "0") { 
    $f = file($data_file); 
    rsort($f); 
    $j = count($f); 
    if ($j > $max_record_in_data_file) { 
    $rf = fopen($data_file,"w"); 
      if (strtoupper($os) == "UNIX") { 
      if (flock($rf,LOCK_EX)) { 
        for ($i=0; $i<$max_record_in_data_file; $i++) { 
         fwrite($rf,$f[$i]);  
     } 
        flock($rf,LOCK_UN); 
      } 
      } else { 
       for ($i=0; $i<$max_record_in_data_file; $i++) { 
        fwrite($rf,$f[$i]);  
      } 
     } 
    fclose($rf); 
    } 
} 
} 
session_start(); 
$newline = (strtoupper($os) == "WIN") ? "\r\n" : "\n"; 
switch ($do) { 
case "": 
    $record = file($data_file); 
    rsort($record); 
    $jmlrec = count($record); 
?> 

У меня есть, конечно, удалил пароль и адрес электронной почты для обеспечения безопасности, в настоящее время здесь isthe смешной части.

Эта ошибка начала происходить в тот момент, когда я изменил эту настройку там, но если бы я попытался вернуть ее обратно в 1800 (я изменил ее на 11800, чтобы проверить ее), она все равно дает мне эту ошибку.

Любая идея, что это?

гостевая книга Ссылка: promosi-web.com/script/guestbook/

+0

Возможно, вам понадобится перезагрузка веб-сервера, возможно? Можете ли вы попробовать заставить session_end для всех живых сеансов, если они есть? Мне просто интересно. – Kangkan

+0

Возможный дубликат [Заголовки уже отправлены PHP] (http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – Jocelyn

ответ

4

Наиболее распространенной причиной этой ошибки что-то добавляется в файл перед <?

Скорее всего пространства или UTF byte order mark.

+1

Я могу подтвердить, что это спецификация, которая создает проблемы. – Repox

+0

Я тоже могу это подтвердить. Это спецификация для UTF-8. – Gumbo

0

В сообщении говорится, что «выход начался с ... \ guestbook.php: 1». Поэтому в этой строке должно быть что-то в этой строке, которая инициировала вывод.

Убедитесь, что перед открытием нет пробелов или других невидимых символов (например, BOM) <?.

1

Поместите свой session_start() после того, как <? и вы должны быть хорошо

Примечание:

Чтобы использовать сеансы печенья на основе, session_start() должна вызываться перед outputing ничего браузера.

http://php.net/manual/en/function.session-start.php

+0

это сработало, спасибо кучу – joao

+0

Нет проблем. У меня была проблема несколько раз раньше, и я всегда ставил ее наверху. – wajiw

0

Проверьте, если у вас есть пробел или знак порядка байт, вы также можете сделать

ob_start(); в начале страницы и ob_end_flush(); в конце для решения этой проблемы.

, но IMO проверяет пространство или B.O.M