Cannot modify header information (DnCounter)

Fermé
dallap - 26 sept. 2009 à 17:19
 dallap - 27 sept. 2009 à 20:15
Bonjour,
je souhaiterais utiliser un script qui compte les téléchargement j'ai donc voulu utiliser celui-ci:
http://www.agostinhorosa.com.br/DnCounter-en-fronte.html

je l'ai extrait dans / puis configuré
je peux accéder à l'interface admin sur www.monsite.com/DnCounter_admin.php mais lorsque j'essaye d'ajouter un fichier, de voir la liste des fichiers présents ou de consulter les stats j'ai le message d'erreur :

Warning: Cannot modify header information - headers already sent by (output started at /homez.221/monsite/www/DnCounter_stats.php:138) in /homez.221/monsite/www/DnCounter_func.inc on line 52


voici la ligne 138 du fichier stat:
echo "<HTML>\n<BODY>\n<HEAD>\n\t<TITLE>DnCounter Administration Page</TITLE>\n</HEAD>\n<BODY BGCOLOR=\"FFFFFF\">";

et la 52 du func.inc :
$user_msg = str_replace( " ", "%20", $user_msg );
if ( $fatal ){
Header( "Location: $GLOBALS[ErrorPage]?msg=$user_msg" ); //LIGNE 52
exit;
}

j'ai lu pas mal de discussions l'a dessus et c'est que le header a deja été envoyé.... mais je ne sais pas quoi changer pour le faire fonctionner.

Pourriez vous me mettre sur la voie svp?

merci ! :)

2 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 sept. 2009 à 19:55
Bonjour,

Commençons du début :)
Quand un client demande une page web à un serveur, le serveur renvoie des données. Celles-ci sont réparties de deux façons : le "header" http, et le corps du message.
Le header http comporte des informations diverses nécessaires à la bonne communication entre les parties : url de la page, données diverses (y compris mise en place de cookies, type de document)... Comme son nom l'indique, le header est envoyé en premier. Dans le corps du message, il y a tout le code HTML.

Donc, du côté du serveur php, quand on lui demande d'envoyer un élément du corps de la page, il est obligé d'envoyé d'abord le header.
C'est pourquoi à ta ligne 138, au moment où tu fais le echo, PHP n'effectue pas une mais deux actions :
1 - Il envoie le header, qui est nécessaire pour pouvoir envoyer le début de ta page ;
2 - Il envoie ce que tu lui demandes ("<html>...").

Par ailleurs, certaines fonction PHP agissent sur le header. C'est le cas de la mise en place d'une session, qui utilise un cookie, ou, plus évidemment, de la fonction header() qui modifie directement les informations envoyées au client dans le header http.

Que se passe-t-il donc quand le serveur php atteint ta ligne 52 ? Il veut modifier le header, mais comme il l'a déjà envoyé au client, ce n'est plus possible ! D'où l'erreur.

Une fois ceci bien compris, comment résoudre ton problème ?
Tu l'as deviné, il y a deux solutions évidentes :
- Soit placer l'inclusion de func.inc avant ta ligne echo ;
- Soit différer l'envoi des informations de la page, par exemple en ne faisant pas "echo" mais en faisant $html = "<html><body>...", puis, après ton include(func.inc), mettre echo $html.

Voilà, j'espère que je t'ai bien aidé !

Xavier

PS : c'est quand même mauvais signe pour toi qu'il essaie d'atteindre cette ligne 52, puisque manifestement elle correspond à une erreur fatale...
0
merci beaucoup pour ces explications :)
0