2010-11-16 5 views
0

aujourd'hui un de mes amis a eu un problème avec son livre d'or. Nous utilisons un petit livre d'or orienté php qui fonctionnait bien sauf pour une chose: il avait atteint sa limite de messages.session_start() question

Donc ce que j'ai fait est de modifier le fichier blog et de modifier le paramètre suivant: // Entrée maximale stockée dans le fichier de données $ max_record_in_data_file = 1800;

Au moment où j'ai fait cela, quelque chose s'est très mal passé. J'ai téléchargé le fichier en arrière sur le serveur et obtenu les éléments suivants:

Warning: session_start() [function.session-start]: ne peut pas envoyer cookie de session - têtes déjà envoyés par (output started at E: \ inetpub \ vhosts \ trilogianocturnus.com \ httpdocs \ guestbook.php: 1) dans E: \ inetpub \ vhosts \ trilogianocturnus.com \ httpdocs \ guestbook.php en ligne 95

Je ne sais pas ce que cela est, je suis très nouveau à PHP, mais d'après ce que je comprends, cela signifie que quelque chose est déjà appelé par le navigateur avant session_start

La page se trouve à l'adresse: http://trilogianocturnus.com/guestbook.php

Le code avant que la tête est la suivante:

<? 
/*----------------------------------------------------- 
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); 
?> 

J'ai bien sûr, retiré le mot de passe et e-mail pour la sécurité, maintenant ici estle drôle.

Cette erreur a commencé à se produire au moment où j'ai changé cette configuration là-haut, mais si j'ai essayé de revenir à 1800 (je l'ai changé en 11800 pour le tester), ça me donne cette erreur.

Une idée de ce que c'est?

L'URL du livre d'or est: promosi-web.com/script/guestbook/

+0

Vous avez peut-être besoin d'un redémarrage du serveur Web, possible? Pouvez-vous essayer de forcer un session_end pour toutes les sessions en direct, le cas échéant? Je me demande simplement. – Kangkan

+0

duplication possible de [En-têtes déjà envoyés par PHP] (http://stackoverflow.com/questions/8028957/headers-already-sent-by-php) – Jocelyn

Répondre

4

La cause la plus fréquente de cette erreur est quelque chose d'être ajouté au fichier avant la <?

Très probablement un espace ou UTF byte order mark.

+1

Je peux confirmer que c'est la nomenclature qui pose problème. – Repox

+0

Je peux confirmer cela aussi. C'est la nomenclature pour UTF-8. – Gumbo

0

Le message indique que la "sortie a commencé à ... \ guestbook.php: 1". Il doit donc y avoir quelque chose dans ce fichier sur cette ligne qui a initié la sortie.

Assurez-vous qu'il n'y a pas d'espaces ou d'autres caractères invisibles (comme un BOM) avant l'ouverture de la balise <?.

1

Mettez votre session_start() après <? et vous devriez être bien

Note:

Pour utiliser les sessions fondées sur les cookies, session_start() doit être appelée avant outputing quoi que ce soit au navigateur.

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

+0

cela a fonctionné, merci un tas – joao

+0

Pas de problème. J'ai eu le problème quelques fois avant et toujours le mettre au sommet maintenant. – wajiw

0

Vérifiez si vous avez un espace ou une marque d'ordre d'octet, vous pouvez également faire une

ob_start(); au début de la page et ob_end_flush(); à la fin pour résoudre ce problème.

mais OMI vérifier l'espace ou le B.O.M

Questions connexes