Php Warning: Cannot modify header information

Résolu/Fermé
lolo3 - 24 janv. 2005 à 02:39
 norre - 5 mai 2020 à 00:05
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
A voir également:

28 réponses

kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 523
24 janv. 2005 à 07:20
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>';
?>
60
preuss
Messages postés
12
Date d'inscription
jeudi 29 mars 2001
Statut
Membre
Dernière intervention
12 juin 2008
1
18 févr. 2007 à 14:35
Cannot modify header information - headers already sent by ;;;;


Ce message d’erreur indique que vous tenter d’écrire des entêtes HTML, alors que le corps de la page a déjà été enrichi.
En plus clair :
Votre script php a généré par exemple
Echo ‘ bonjour,’
Et ensuite dans votre script apparaît une ligne du genre

Header (‘une entête….’)

D’une manière générale il faut éviter ce genre de chose (pour des raisons de performances) mais ce n’est pas rédhibitoire.
Premièrement, faite phpinfo() et vérifier le paramètre output_buffering, il est certainement à off
Il faut le modifier (dans php.ini) il lui attribuer une valeur 1024, 2048 ou 4096 voire on
Il faut aussi penser à redémarrer apache.

Cela veut dire, ( par exemple 4096), que vous enregistrer dans un BUFFER pour un maximum 4096 octets de code de votre page, donc qui ne sont pas encore envoyé vers la sortie standard.
Tant que votre script écrit dans le BUFFER vous pouvez rajouter des entêtes par la commande header. Ensuite le BUFFER envoi en bloc vers vote navigateur

Evidement, tout ceci n’est valable que si vous avez la maîtrise du php.ini. dans le cas des hébergements mutualisés il n’est pas possible de modifier ce paramètre…
www.actonis.fr
0
spike911
Messages postés
116
Date d'inscription
jeudi 11 mars 2004
Statut
Membre
Dernière intervention
21 janvier 2020
10
25 févr. 2009 à 02:27
Il est possible de faire un simple:
<?php
      include_once "$Nom_de_la_page";
      exit(); 
?>

0
Judes-Emile Bornes IV
Messages postés
123
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
23 février 2010
12
1 sept. 2009 à 18:22
Le même script avec un timer.

echo '<script language="Javascript">
<!--
var t=setTimeout("document.location.replace(\'page.html\')", 2000);
// -->
</script>';
0
alexouus
Messages postés
8
Date d'inscription
vendredi 13 août 2010
Statut
Membre
Dernière intervention
17 août 2010

17 août 2010 à 11:11
Merci beaucoup! :)
0
Merci, ça fonctionne grâce à toi !
0