Php Warning: Cannot modify header information [Résolu/Fermé]

Signaler
-
 Bebleu -
bonjour,

j ai code php qui dans une premiere version dite en "dur" qui marche tres bien.
Le probleme pour sa reutilisation et sa maintenace plus aisee, je souhaite remplacer mes parametres en "dur" par des variables php. J ai donc proceder un la maniere c, a savoir creer un fichier de config: config.php qui donne cela:
<?
if (!isset($CONFIG) || $CONFIG!=1)
{
$CONFIG=1;
$www="xxxxxxxxx";
$database="xxxxxxx";
$dbname="xxxx";
$dblogin="xxxx";
$dbpasswd="xxx";
}
?>


dans mes pages ou je souhaite avoir connaissance a ces variables j ajoute en debut:

if (!isset($CONFIG) || $CONFIG!=1)
{
include('./../config/config.php');
}

Je fais appel a la fonction header du genre:
header("Location: $www");

Au niveau de ma base donnees tout fonctionne(ajout reussi) mais php renvoie

Warning: Cannot modify header information - headers already sent by (output started at /xxxxxxxxxx/config/config.php:26) in /xxxxxxxxxxx/log2/index.php on line 54

Y a t il un myen d eviter cela???
Merci d avance

ps: PHP Version 4.3.4

28 réponses

Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1403
Salut,

Ca signifie que du code Html a déjà été généré (ça viendrait de la 26 ème ligne de config.php ....mais il en fait beaucoup moins, c'est bizzare).
Car la fonction header doit être appelée avant la génération de la moindre mise en page.

Au pire, tu peux remplacer ta ligne avec header() par une redirection javascript
<?
echo '<script language="Javascript">
<!--
document.location.replace("$www");
// -->
</script>';
?>
58
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 79660 internautes nous ont dit merci ce mois-ci

Sinon il suffit d'utiliser la fonction PHP dédiée ob_start() http://www.php.net/manual/fr/function.ob-start.php
Le javascript étant désactivable côté client...
arrivedercho
Messages postés
1
Date d'inscription
mardi 9 octobre 2012
Statut
Membre
Dernière intervention
16 octobre 2012

@RedLog
ok, mais je vois que dans le manuel php il est dit que :
ob_start() démarre la tamporisation de sortie. Tant qu'elle est enclenchée, aucune donnée, hormis les en-têtes, n'est envoyée au navigateur, mais temporairement mise en tampon.

si les entêtes sont envoyées je ne vois pas l'intérêt d'ob_start pour ce cas précis...
j'ai rencontré ce problème et grâce à vos conseils, c'est résolu. Un gros merci!!
js Working thanks !
Bonjour, vous devriez regarder cet article qui recense de nombreuse manières pour résoudre cette erreur :
http://blog.darklg.fr/136/php-erreur-cannot-modify-header-information/

Bien cordialement, Jean Michel.
excellent, un fichier de session avec des lignes blanches a cassé mon code, apres nettoyage, le redirect/header ne voit plus ces lignes donc pas d'output avant lui, et ca remarche de nouveau ;-)

Merci pour ton lien

Merci pour ce lien qui m'a sauvé après 2H de recherche !
Excellent le lien, permet de bien cibler toutes les cause de ce problème, c'est tout juste ce qu'il me fallait. Merci beaucoup

Je partage simplement ce qui m'a mis le plus de temsp à comprendre et qui est pourtant la clé du problème, en tous cas pour mon problème !
Si vous avez une erreur de ce genre :
headers already sent by (output started at /xxxxxxxxxx/config/config.php:26) in /xxxxxxxxxxx/log2/index.php on line 54
Il NE FAUT PAS chercher dans la ligne 54 de index.php mais plutôt dans la 26eme ligne de config.php et même plus exactement avant ou après la 26eme ligne, il peut tout simplement s'agir comme moi d'un petit espace de trop tout à la fin du code ou juste avant <?php ou juste après ?>
2 jours passes sur cette erreur pour un siomple petit espace en trop !!!
le résultat : <a href="http://www.chambreshotesjolivet.fr">chambre hôtes Jolivet</a>
Bon courage !!!
Effectivement erreur dans le Wp-config de Wordpress, il y avait un espace en trop avant le <?php !!!

Merci :)
Merci chef ça marche nickel avec le java script!!!!!

ps: elle est un peu con la fonction header de php
Messages postés
33214
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
13935
Non elle est pas con, c'est normal. :-)
une explication alors....
Hello, efféctivement, cette astuce marche mai ici j'ai un probleme avec cette erreur mais je ne peu pas appliquer cet soluce

l'erreur est sur ces 2 lignes
setcookie("idm");
setcookie("pseudom");


voici le code de mon fichier logout.php en entier
<?php
include"config_script.php";
setcookie("idm");
setcookie("pseudom");
$pseudom=$HTTP_COOKIE_VARS['pseudom'];
mysql_query("DELETE FROM fk_online WHERE pseudo='$pseudom'") or die (mysql_error());
echo"<br><br><center><b>Deconnexion...</b></center>";
unset($pseudom);
unset($idm);
echo"<body bgcolor='$_COULEUR_FONT'>
<script type=\"text/javascript\">function redirection_js(){ x=setTimeout(\"window.location.href='index.php'\",1500); }
</script><body onLoad=\"redirection_js();\">
";
?>

faut til que je modifie mon config_script.php?
merci les gars
merciiiii
Moi ca marche pas!!!!!!!
Bonsoir, j'ai le meme probleme apparement,


Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\forum\db\mysql4.php on line 318

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\wamp\www\forum\db\mysql4.php on line 318

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\forum\db\mysql4.php:318) in C:\wamp\www\forum\includes\page_header.php on line 641

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\forum\db\mysql4.php:318) in C:\wamp\www\forum\includes\page_header.php on line 647

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\forum\db\mysql4.php:318) in C:\wamp\www\forum\includes\page_header.php on line 648


je ne sais pas trop d'ou ca vient le probleme

Si vous pouviez m'aider ^^
Messages postés
33214
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
13935
Le format d'une réposne HTTP est comme ceci:

HTTP/1.x 200 OK
Date: Mon, 24 Jan 2005 15:16:52 GMT
Content-Type: text/html

<html>
<head>...



D'abord un bloc d'entêtes, puis le corps du document lui-même.


Si tu as déjà écris des données dans le corps du document, ça veut dire que les entêtes sont déjà envoyées.
Vues qu'elles sont déjà envoyés, on ne peut plus les modifier.
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1403
Messages postés
10
Date d'inscription
vendredi 6 juin 2008
Statut
Membre
Dernière intervention
30 juillet 2008
1
Décidément je trouve ce forum fantastique, à quasiment tous mes problèmes, je trouve la solution ici.
Un grand merci à vous!
Messages postés
12
Date d'inscription
mercredi 8 octobre 2008
Statut
Membre
Dernière intervention
9 octobre 2008
2
Bonsoir,

J'a un probléme avec un retour sur page adns mon formulaire de contact php , aprés avoir rempli la page contact, le visiteur clic sur envoi et voici la page affichée:
" Warning: Cannot modify header information - headers already sent by (output started at /home/studioph/public_html/contact.php:1) in /home/studioph/public_html/contact.php on line 33 "
Je précis eque je reçois le message sur ma boite mail!!

Voici ma page php:

"<title>contact.php</title><?php
/************************************************
Renseignez correctement les Champs ci-dessous
************************************************/
/* Mettre entre les guillemets la page où l'utilisateur
doit être envoyé après avoir validé le formulaire
ex : une page de remerciement ou retour à la page
index.html */
$retour="menu.html ";
/* Indiquez entre guillemets l'email qui devra recevoir
le contenu du formulaire saisi par le visiteur
et le sujet du message e-mail qui sera envoyé */
$To = $From = "info@studiophoto1.fr";
$Subject="Formulaire saisie sur mon site.";
/************************************************
Ne rien toucher après cette ligne
************************************************/
if(eregi("\n",$To) OR eregi("\n",$From) OR eregi("\n",$Subject)){
die("Accès refusé");
}
$From2=explode("@",$From);
if ( !eregi($From2[1], $_SERVER['HTTP_HOST']) )
die("Accès refusé.");
$message="";
foreach($_POST as $key => $P){
$message.=$key." = ".$P."\r\n\r\n";
}
$headers = "From: <".$From.">\n";
$headers .= "X-Sender: <".$From.">\n";
$headers .= "X-Mailer: PHP - ".$_SERVER['HTTP_HOST']."\n"; // Origine
$headers .= "Return-Path: <".$From.">\n"; // Re-chemin de retour
mail($To, $Subject , $message, $headers);
header("Location: $retour");
?>

"

J'ai installé ce même script sous 2 autres sites et ça fonctionne, en fait j'ai 3 fois le même site avec des différents domaines.Cela ne fonctionne pas sur celui-ci...

Des suggestions?
Merci par avance.

Philippe

Une suggestion
La réponse est dans ce fil, il ne faut rien envoyer avant les en-têtes (header, setcookie,...)
Ici, tu envoies le titre avant les en-tête, ça ne marche pas !
Commence ton script par <?php et supprime donc tout ce qu'il y a avant.

cdt,
Simon.

Je partage simplement ce qui m'a mis le plus de temsp à comprendre et qui est pourtant la clé du problème, en tous cas pour mon problème !
Si vous avez une erreur de ce genre :
headers already sent by (output started at /xxxxxxxxxx/config/config.php:26) in /xxxxxxxxxxx/log2/index.php on line 54
Il NE FAUT PAS chercher dans la ligne 54 de index.php mais plutôt dans la 26eme ligne de config.php et même plus exactement avant ou après la 26eme ligne, il peut tout simplement s'agir comme moi d'un petit espace de trop tout à la fin du code ou juste avant <?php ou juste après ?>
2 jours passes sur cette erreur pour un siomple petit espace en trop !!!
le résultat : http://www.chambreshotesjolivet.fr
Bon courage !!!
ok merci, je comprends la couille maintenant
A bientot tlm
et merci de votre aide
Merci à toi kilian, ton code marche très bien !
Kilian t un beau gosse ;-)
merci
Bonjour,
j'ai le même bp , mais avec setcookie ("variable") ; ,avant setcookie il n'a y pas de sortie comme echo , ou n'import qu'elle balise html , enfait chez moi ça march parfaitement j'utilise le php 4.3.3 , chez l'hébérgeur ou ça pose pb il utilise 5.2.2, je ne sait pas si il un rapport de version
Messages postés
58
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
14 février 2009
12
Salut a tous,

dans vos fichiers de config après le dernier ?> il n'y aurrai pas des espaces ou plusieurs retour chariot, qui seraient mis dans le contenu du document http ?
Si après toutes ces explications, ça ne marche pas...
Regardez le format d'encodage du fichier PHP losque vous l'éditez...Il doit être en UTF8 SANS BOM...

Navajo
Bonjour, bon c'est un peu tard mais merci pour ce post, ça a marché en mettant utf8 sans bom, cordialement
J'avais le meme soucis, mais je ne voulais pas ariver au meme résultat que vous je crois:

Je voulais que n'importe qui arrivant sur mon, soir rediriger sur la meme page mais avec un argument supplémentaire. Genre:

http://blabla.com >> http://blabla.com/index.php?action=news

Seulement voila, c'est impossible justement a cause de cette redifition d'en-tete.
Solution:
créer main.php, du coup:

http://blabla.com >> http://blabla.com/main.php?action=news

Voila juste au cas ou des personnes aurait le meme souci ;)
1 2