Cannot modify header information - headers already sent

Cannot modify header information - headers already sent - PHP - Programmation

Marsh Posté le 09-12-2012 à 11:48:45    

Bonjour à tous
 
je suis chez 1&1 pour l"hébergement de mes sites, suite a un upgrade de services chez eux, j'ai un message d'erreur sur tous mes formulaires de contact.
 
http://www.gite-la-tronchere.fr/cont...e-puy-dome.php
http://www.planete-sports.fr/inscrip...ultisports.php
http://www.bergheaud.fr/contact.php
 
et il y en a d'autres...
 
avez vous une idée pour régler ce PB qui semble être identique sur chacun de mes site car j'ai une bonne dizaine de formulaires dans ce cas!
 
merci de votre aide

Reply

Marsh Posté le 09-12-2012 à 11:48:45   

Reply

Marsh Posté le 09-12-2012 à 12:11:32    

A priori il y a des appels à session_start() qui sont fait alors que du contenu a déjà été envoyé au navigateur.
 
cf manuel :
 

Citation :

Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur.


 
Il faudrait vérifier, il ne faut rien qu'il y ait avant le session_start(). Même un retour à la ligne avant le <?php suffit à afficher cette erreur.
 
Donc en gros, il faut que le fichier commence par <?php (pas d'espace, pas de retour à la ligne), et que session_start() soit appellé avant le ?> et toute fonction qui affiche du contenu du style echo.


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 09-12-2012 à 12:31:14    

voici le début de mon index.php
 

Citation :

<?php
session_start();
$cryptogramme = TRUE; //Cryptogramme pour éviter le spam TRUE = activé, FALSE = désactivé
$format = 'html';  // Mettez ici le format de l'email, pour html mettez 'html', pour le format texte mettez 'texte'
$foncmail = 'mail'; // Si votre hébergeur permet la fonction mail mettez 'mail', sinon vous pouvez utiliser smtp en mettant 'smtp'


Message édité par titi63 le 09-12-2012 à 12:32:28
Reply

Marsh Posté le 09-12-2012 à 15:10:50    

j'ai bien vérifié les espaces et retour à la ligne mais tjrs le message d'erreur  
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/37/d141117866/htdocs/BER/contact.php:5) in /homepages/37/d141117866/htdocs/BER/for/index.php on line 2

Reply

Marsh Posté le 10-12-2012 à 08:49:04    

Tout est expliqué dans le message d'erreur : dans ta page contact.php, il y a quelque chose à la ligne 5 qui envois du contenu, et ça se passe avant d’exécuter ta page index.php


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 11-12-2012 à 21:52:43    

merci pour cette précision mais dans contact.php j'ai mon <head> de la ligne 3 à 14, donc ligne 5 rien ne peut envoyer du contenu...

Reply

Marsh Posté le 12-12-2012 à 08:47:34    

Eh bien ton <head>, c'est du contenu, si tu inclus la page index.php après c'est donc normal.
 
Ca serait plus simple si on avait aussi le contenu de contact.php (au moins les premières lignes) :p


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 12-12-2012 à 17:44:45    

Ah oui j'ai un include avec mon index dedans bien plus bas
Mais si je le déplace il ne sera plus au bon endroit sur ma page web?
comment faire pour mettre l'include avant le head?
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<meta name="keywords" content="lavaur, b&eacute;chade, soudure, m&eacute;cano, issoire, chaudronnerie" />
<meta name="description" content="une dizaine de mots diff&eacute;rent sur chaque page" />  
<link href="style.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" type="image/x-icon" href="/img/favicon.ico" /><!-- pour IE -->
<link rel="icon" type="image/gif" href="/img/favicon.gif" /><!-- pour les navigateurs standards -->
<style type="text/css">
</style>
<link rel="stylesheet" type="text/css" href="for/contact.css" />
</head>
<body>
 <div id="all">
 <div class="ban">  
<div class="B" style="height: 185px; width: 172px">
 <object type="application/x-shockwave-flash" data="img/B.swf" style="width: 177px; height: 198px">
        <param name="movie" value="img/B.swf" />
        <param name="quality" value="high" />
        <param name="wmode" value="transparent" />
        <p>Installez le plugin Flash pour voir l&#39;animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
  </object>
</div>
<div class="ergheaud">
 <object type="application/x-shockwave-flash" data="img/ergheaud.swf" width="339" height="121">
        <param name="movie" value="img/ergheaud.swf" />
        <param name="quality" value="high" />
        <param name="wmode" value="transparent" />
        <p>Installez le plugin Flash pour voir l&#39;animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
  </object>
</div>
 
 
</div>
 
 <div class="bandroite">  
<div id="citation">
 
 <object type="application/x-shockwave-flash" data="img/stars.swf" width="330" height="134">
        <param name="movie" value="img/stars.swf" />
        <param name="quality" value="high" />
        <param name="wmode" value="transparent" />
        <p>Installez le plugin Flash pour voir l&#39;animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le télécharger</a></p>
  </object>
 
  </div>
 
<div id="flag">
<div id="drfr"><a href="contact.php"> <img alt="Francais" src="img/img-transparent.gif" width="50" height="25" /></a></div>
<div id="dral"><a href="contact.php">    <img alt="Allemand" src="img/img-transparent.gif" width="50" height="25" /></a></div>
<div id="dren"><a href="contact.php">    <img alt="Anglais" src="img/img-transparent.gif" width="50" height="25" /></a></div>
 
</div></div>
 
 
 <div class="nav">
 <div class="navcontenu">
 <div class="B1"><div class="txtbtnnormalbk"><a href="chaudronnerie.html">Chaudronnerie</a></div>
  <a href="chaudronnerie.html"><img alt="Chaudronnerie" src="img/chaudronnerie2130.JPG" width="130" height="90" class="bordureimage" /></a><br/>
  <a href="chaudronnerie.html"><img alt="chaudronnerie" src="img/boutonmenu.png" width="130" height="35" class="bordureimage" /></a></div>
 <div class="B2"><div class="txtbtnnormalbk"><a href="mecano-soudure.html">M&eacute;cano-soudure</a></div><img alt="mécano-soudure" src="img/mecano-soudure-1130.jpg" width="130" height="90" class="bordureimage" /><br/><img alt="Mécano Soudure" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
 <div class="B3"><div class="txtbtnnormalbk"><a href="usinage.html">Usinage</a></div><img alt="Usinage" src="img/usinage-1130.jpg" width="130" height="90" class="bordureimage" /><br/><img alt="chaudronnerie" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
 <div class="B4"><div class="txtbtnnormalbk"><a href="equilibrage.html">Equilibrage</a></div><img alt="Equilibreuse Schenk" src="img/Equilibreuse-Schenk-130.JPG" width="130" height="90" class="bordureimage" /><br/><img alt="chaudronnerie" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
 <div class="B5"><div class="txtbtnrebk"><span lang="fr">
  <a href="remise-en-etat-d-equipements.html">Remise en &eacute;tat d'&eacute;quipements</a></span></div><img alt="Remise en état" src="img/remise-en-etat-3130.jpg" width="130" height="90" class="bordureimage" /><br/><img alt="chaudronnerie" src="img/boutoneit.jpg" width="130" height="35" class="bordureimage" /></div>
   
   
 <br />
 </div>
 </div>
 
 <div class="txt">
 
 <div class="index"><a href="index.html">
 <img alt="accueil" src="img/accueil.png" width="23" height="90" /></a>
 </div>
 
 <div class="plaquette">  
 <object type="application/x-shockwave-flash" data="img/plaquette.swf" width="139" height="229">
        <param name="movie" value="img/plaquette.swf" />
        <param name="quality" value="high" />
        <param name="wmode" value="transparent" />
        <p>Installez le plugin Flash pour voir l&#39;animation : <a href="http://www.adobe.com/go/gntray_dl_getflashplayer_fr" title="LienPlugin">Cliquez ici pour le t&eacute;l&eacute;charger</a></p>
  </object>
  </div>
   
 <div class="contenucontact">
  <div class="contact">
   <p class="txtactivites">  
<?php
include( 'for/index.php' );
?>
&nbsp;
</p>
  </div>
  <div class="droite">
   <h1><br />
   Contactez nous</h1>
   <p>Vous pouvez remplir ce formulaire <br />
   ou utiliser notre adresse mail :<br />
   
..........
etc...
 
 
 
 

Message cité 1 fois
Message édité par titi63 le 12-12-2012 à 17:45:53
Reply

Marsh Posté le 12-12-2012 à 18:02:20    

Tout dépend de ce que fait index.php en fait.
 
Si comme je le pense il se contente de traiter la validation du formulaire, il ne devrait pas y avoir de problème. Cette fois, ça dépend du contenu de for/index.php
 
Le plus simple c'est de tester non?


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 12-12-2012 à 18:24:25    

titi63 a écrit :

Ah oui j'ai un include avec mon index dedans bien plus bas
Mais si je le déplace il ne sera plus au bon endroit sur ma page web?
comment faire pour mettre l'include avant le head?


ton include est une fonction php. Et ton session_start() est dans le fichier inclus c'est bien ça ?
 
Si c'est le cas tu as la solution à ton problème. Tu as du code PHP avant ton session_start  
 
 ;)

Reply

Marsh Posté le 12-12-2012 à 18:24:25   

Reply

Marsh Posté le 12-12-2012 à 20:37:29    

Si je modifie la position de l'include de mon contact.php, ça me change le formulaire de place, donc ce n'est pas bon
Tester quoi?
voici le contenu de mon index.php :  
 
<?php if(session_id()=='') { session_start(); }
$cryptogramme = TRUE;
$format = 'html';
$foncmail = 'mail';
$hostsmtp = '';
$portsmtp = '25';
$authsmtp = true;
$usersmtp = '';
$passmtp = '';
$included_files = get_included_files();
require(dirname(__FILE__).'/include/fonctions.php');
if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>Formulaire de contact</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <meta name="revisit-after" content="1">
 <meta name="description" content="EXmail 1.2">
 <meta name="keywords" content="exmail">
 <meta name="robots" content="ALL">
 <meta name="distribution" content="Global">
 <meta name="rating" content="General">
 <meta name="copyright" content="Steuf">
 <meta name="author" content="Steuf">
 <link rel="stylesheet" type="text/css" href="contact.css">
</head>
<body>
<?php
}
if (isset($_POST['submit'])){
$to = 'xxx@free.fr' ;
$subject = 'Demande depuis www.xxx.fr' ;
 
 if(!CheckEmail($_POST['email'])){
  $error[] = '<p class="erreur">Votre adresse Email n\'est pas valide !</p>';
 }
 if((empty($_POST['cryptogramme']) or $_POST['cryptogramme'] !== $_SESSION['captcha-control']) and $cryptogramme === TRUE){
  $error[] = '<p class="erreur">Cryptogramme invalide !</p>';
 }
 if(empty($_POST['tel'])){
$error[] = '<p class="erreur">Vous n\'avez pas mis votre num&eacute;ro de t&eacute;l&eacute;phone !</p>';
}
 if(isset( $_FILES['upload_localfile']['tmp_name']) and is_uploaded_file($_FILES['upload_localfile']['tmp_name'])){
  $destination = dirname(__FILE__).'/upload/'.$_FILES['upload_localfile']['name'];
  if(move_uploaded_file($_FILES['upload_localfile']['tmp_name'], $destination)){
   $uploadinfo = '<p class="erreur">Upload R&eacute;ussi</p>';
  }
 }
 else {
  $uploadinfo = '<p class="erreur"><p>';
 }
 if(!isset($error) or empty ($error)) {
  $reqclass = dirname(__FILE__).'/include/class.phpmailer.php';
  require_once ( $reqclass );
  $mail = new PHPmailer();
  if($foncmail === 'mail'){
   $mail->IsMail();
  }
  elseif($foncmail === 'smtp'){
   $mail->IsSMTP();
   $mail->Host = $hostsmtp;
   $mail->Port = $portsmtp;
   $mail->SMTPAuth = $authsmtp;
   $mail->Username = $usersmtp;
   $mail->Password = $passmtp;
  }
  if($format === 'html'){
   $mail->IsHTML(true);
  }
  elseif($format === 'texte'){
   $mail->IsHTML(false);
  }
  $mail->From = $_POST['email'];
  $mail->FromName = $_POST['nom'];
  $mail->AddAddress( $to );
  $mail->Subject = $subject ;
  $mail->Body = stripslashes( $body );
  if(isset($destination)){
   $mail->AddAttachment( $destination );
  }
  if(!$mail->Send()){
   echo '<p class="erreur">Erreur fonction mail() :</p>';
   echo $mail->ErrorInfo;
  }
  else{
   echo $uploadinfo;
   echo '<p class="erreur">&nbsp;</p><p class="erreur">Formulaire envoy&eacute; !</p><p class="erreur">Merci de votre message!</p><p class="erreur">Vous allez recevoir une r&eacute;ponse tr&egrave;s prochainement.</p></p>';
  }
  unset($mail);
 }
 else {
  foreach($error as $errormsg){
  echo $errormsg;
  }
  echo '<p class="erreur">Le Formulaire n\'a pas &eacute;t&eacute; envoy&eacute;</p>
   <p class="erreur">Veuillez recommencer !</p>';
 }
 if (isset($destination)){
  unlink($destination);
 }
}
if (((isset($error) or !empty ($error)) and isset($_POST['submit'])) or  !isset($_POST['submit'])){
 include(dirname(__FILE__).'/formulaire.php');
}
 
if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
$body = '<html>
<head>
<title>Recontacter cette personne</title>
    </head>
    <body>
      <br>Texte :'.$_POST['comment'].'
      <br>téléphone :'.$_POST['tel'].'
      <br><br><br>Cliquer sur "répondre" pour donner une réponse par mail
      </body>
   </html>';
   ?>
</body>
</html>
<?php }

Reply

Marsh Posté le 12-12-2012 à 20:49:45    

essaye alors de placer

Citation :

<?php if(session_id()=='') { session_start(); } ?>


 
tout au début de ta page contact.php (même pas un retour à la ligne ou un espace avant), sans rien changer d'autre


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

Marsh Posté le 12-12-2012 à 21:01:52    

egege a écrit :


ton include est une fonction php. Et ton session_start() est dans le fichier inclus c'est bien ça ?

 

oui c'est bien cela
ça veux dire qu'il faut que je déplace mon session_start dans mon fichier contact.php ?
j'ai essayé mais cela me donne

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/37/d141117866/htdocs/BER/contact.php:7) in /homepages/37/d141117866/htdocs/BER/contact.php on line 93

 

et j'ai toujours mon head avant mon include


Message édité par titi63 le 12-12-2012 à 21:03:15
Reply

Marsh Posté le 12-12-2012 à 21:47:37    

x1fr a écrit :

essaye alors de placer

Citation :

<?php if(session_id()=='') { session_start(); } ?>


 
tout au début de ta page contact.php (même pas un retour à la ligne ou un espace avant), sans rien changer d'autre


 
Jackpot, c'est bien ça
Merci à vous d'avoir consacré un peu de votre temps à me répondre
 :)  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed