demande alternative au Header("Location: ...")

demande alternative au Header("Location: ...") - PHP - Programmation

Marsh Posté le 22-04-2009 à 11:31:46    

Bon suite à la mise en place d'un site sur OVH je continu dans la ligné des soucis.
Evidement en local aucun probleme (ce que je comprend pas d'ailleur)
 
Et j'ai la fameuse erreur que chacun rencontrer un jour le fameux header already sent
 
Je vous remerci avant de continuer a lire ce roman dans la futur aide que l'on peu m'apporter c'est surement un truc tout con mais la je m'arrache les cheveux (que j'ai plus) a trouver la solution
 
 
biensur je connais le symptome  
il ne faut pas d'affichage avant une redirection (pas de html d'y de echo"
et faut que le session_start() soit la premiere ligne pas d'espace ou de saut de ligne avant
 
ok sa je sais mais la j'arrive pas a reglet mon souci
 
mon code est un pas simple a monter vu que je passe par un controleur avec toute une panoplie de script mais vais essayé
 
donc dans un premier temps voici un bout de code authentication.php avec des header
 

Code :
  1. <div id="blkCentre" >
  2.  <?php
  3.   if($_GET['opt'] == 3){
  4.    session_destroy();
  5.    header('Location:index.php');
  6.   }
  7.   if ($_GET['opt'] == 1){
  8.    if($_POST){
  9.     if($_POST['username'] == "" ){ echo 'vous avez oublié de saisir votre login'; }
  10.     else if($_POST['password'] == "" ){ echo 'vous avez oublié de saisir votre mot de passe'; }
  11.     else {
  12.      $login = $_POST['username'];
  13.      $passwd = md5($_POST['password']);
  14.      $newConnect = new user;
  15.      $nb = $newConnect->verifUser($login,$passwd);
  16.      if($nb == 0){
  17.       echo 'une erreur est survenue lors de votre authentification';
  18.       echo '<br/>';
  19.       echo 'erreur de login ou de mot de passe';
  20.       echo '<br/>';
  21.       echo '<a href="index.php">Retour</a>';
  22.      }
  23.      else{
  24.       $userId = $newConnect->recupUserId($login,$passwd);
  25.       $infoUser = new user($userId);
  26.       $user_name = $infoUser->user_name ;
  27.       $user_pname = $infoUser->user_pname ;
  28.       $_SESSION['user'] = $userId;
  29.       $_SESSION['userName'] = $user_name;
  30.       $_SESSION['userPname'] = $user_pname;
  31.       header('location:index.php');
  32.      }
  33.     }
  34.    }
  35.   }


comme vous pouvez le voir je redirige vers index.php en cas d'une deconnexion ou d'une authentification reussi et c'est la que cela coince  

Citation :


 
Warning: Cannot modify header information - headers already sent by (output started at /homez.139/ecomotio/www/header.php:17) in /homez.139/ecomotio/www/authentification.php on line 9


 
donc pour vous aider a m'aider dans mon probleme voici en gros tout ce qui est afficher / appeler / exécuter (index, header, require et tout le tointoin)
 
fichier index.php
 

Code :
  1. <?php
  2. require_once "includes/verifSession.php";
  3. require_once "header.php";
  4.  // Gestion du controleur.
  5. ....
  6. ...
  7. ....


 
verifSession.php

Code :
  1. <?php
  2. session_start();
  3. // tester la présence de la variable 'langage' dans la session
  4. if ( isset( $_SESSION['user'] ) ) {
  5. $linkConnect = 'Bonjour '.$_SESSION['user'];
  6. } else {
  7. $linkLogin = '<form action="index.php?authentification=1&opt=1" method="post">';
  8. $linkLogin .= '<input type="text" size="9" name="username" class="boxAuth"><br/>';
  9. $linkLogin .= '<input type="password" size="9" name="password" class="boxAuth"><br/>';
  10. $linkLogin .= '<input type="submit"  name="submitAuth" value="ok.." class="boxSubmit"></form>';
  11. $linkInscript = '<a class="linkConnect" href="index.php?authentification=1&opt=2">S\'inscrire</a>';
  12. }
  13. ?>


 
header.php

Code :
  1. <?php
  2. include('require.php');
  3. if ($_GET['opt'] == "private" ){ $opt = "private" ;}
  4. else if ($_GET['opt'] == "public" ){ $opt = "public" ;}
  5. else if ($_GET['opt'] == "publicAll" ){ $opt = "publicAll" ;}
  6. else if ($_GET['opt'] == "privateAll" ){ $opt = "privateAll" ;}
  7. else { $opt = "public" ;}
  8. if ($_GET['next']) { $next = $_GET['next'];}
  9. else { $next = 0; }
  10. ?>
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  12. <html>
  13. <head>
  14. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
  15. <!-- *************************************Appel du fichier JS.php ****************************************************************************************************/ -->
  16.  <?php require_once "js.php"; ?>
  17. <!--/**************************************Appel du fichier CSS.php *************************************************************************************************/ -->
  18.   <?php require_once "css.php"; ?>
  19.  <title><?php echo $ECOconfig['site_titre']; ?></title>
  20. </head>
  21. <Body id="body" onload="recupUrl();loadTrajetPublic('<?php echo $opt; ?>','<?php echo $next; ?>','<?php echo $mem; ?>');">
  22.     <script language="JavaScript" type="text/javascript" src="js/wz_tooltip.js"></script>
  23.    <script language="JavaScript" type="text/javascript" src="js/tip_centerwindow.js"></script>
  24.    <script language="JavaScript" type="text/javascript" src="js/tip_followscroll.js"></script>
  25.    <script language="JavaScript" type="text/javascript" src="js/tip_balloon.js"></script>
  26. <DIV id="filtreOpac"></DIV>
  27. <div id="loaderAjax"></div>
  28. <div id="divAddIti"></div>
  29. <!--  Div Conteneur-->
  30. <div id="conteneur">
  31.  <div id="blkTopSearch">
  32.   <div id="blkTop1"></div>
  33.   <div id="blkTop2"><input type="text" class="searchTop"></div>
  34.   <div id="blkTop3"></div>
  35.  </div>
  36.  <div id="header"></div>


 
require.php

Code :
  1. <?php
  2. //require_once "includes/verifSession.php";
  3. $baseDir = dirname(__FILE__);
  4. // automatically define the base url
  5. $baseUrl = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https://' : 'http://';
  6. $baseUrl .= isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : getenv('HTTP_HOST');
  7. $pathInfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : getenv('PATH_INFO');
  8. if (@$pathInfo) {
  9. $baseUrl .= dirname($pathInfo);
  10. } else {
  11. $baseUrl .= isset($_SERVER['SCRIPT_NAME']) ? dirname($_SERVER['SCRIPT_NAME']) : dirname(getenv('SCRIPT_NAME'));
  12. }
  13. /************************************* Appel du fichier config.php ***********************************************************************************************/
  14. if( is_file( $baseDir."/includes/config.php" ) ) {
  15. require_once $baseDir."/includes/config.php";
  16. }
  17. /************************************** Appel des fichier Classe **************************************************************************************************/
  18. require_once "classes.php";           // insertion de la classe connect-mysq-classe.php  
  19. ?>


Reply

Marsh Posté le 22-04-2009 à 11:31:46   

Reply

Marsh Posté le 22-04-2009 à 12:58:16    

Je sais ce que vous pensez, encore et encore le meme souci a longueur de journée et que la solution est toujours et encore la meme
mais croyez moi j'aurais pas poster si c'etait simplement cela

 

J'ai beau retourner encore et encore le code je trouve pas le souci alors que d'autant plus en local ZERO probleme :(

 

Cela vient pas du "session_start()" car si je l'enlève le souci est encore présent


Message édité par hyptnos le 22-04-2009 à 13:01:36
Reply

Marsh Posté le 22-04-2009 à 13:10:14    

euh  
une question  
est ce normal que tu est ca "<div id="blkCentre" >" avant tout des headers?

Reply

Marsh Posté le 22-04-2009 à 13:10:53    

mais ca fait le probleme sur quel page? quand tu fait quel action?

Reply

Marsh Posté le 22-04-2009 à 13:11:56    

infoman64 a écrit :

euh  
une question  
est ce normal que tu est ca "<div id="blkCentre" >" avant tout des headers?


 
 :heink:  
il ma échapper celui ci :s
Je corrige cela de suite sa ne m'etonnerais pas que cela soit la cause

Reply

Marsh Posté le 22-04-2009 à 13:29:01    

Bon et bien cela aurait ete trop beau j'ai remis cette page authentification corectement sans les div (qui n'avais rien a faire la mais devait etre juste avant le controleur

 

et toujours le meme souci de redirection :(

 


cela dit j'ai verifier le "output_buffering" via un phpinfo() et OVH le met a OFF cela pourrait il pas venir de la ?
si oui comment regler cela sachant que je suis sur un 60GP (donc mutualisé)


Message édité par hyptnos le 22-04-2009 à 13:30:05
Reply

Marsh Posté le 22-04-2009 à 14:47:28    

c vrai que j'ai deja entendu pas mal de fois ce probleme avec ovh
 
si  je souviens bien certains utilisé
debut de la page
ob_start();
et finis les par :
ob_end_flush();
 
je peut completement me tromper, mais il me semble de que c'etait ca

Reply

Marsh Posté le 22-04-2009 à 14:48:26    

mais tu dois avoir quelque part un caractere qui traine(espace, retour a la ligne)

Reply

Marsh Posté le 22-04-2009 à 14:57:44    

si tu as des fichiers enregistrés en UTF-8, vire le BOM.


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 22-04-2009 à 15:12:38    

j'utilise Eclipse module PHP pour developper
et j'ai passer un coup les fichier concerner a un editeur hexa decimal aucun caractère illicite apparait en debut de page donc c'est pas cela :(
 
Donc temporairement j'ai fait des redirection javascript (window.location) c'est bourrin et pas tres propre mais le temps que je trouve car c'est tous mes header qui fout le bordel j'arrive pas a capter d'ou sa vient :(

Reply

Marsh Posté le 22-04-2009 à 15:12:38   

Reply

Marsh Posté le 23-04-2009 à 20:35:09    

Bonsoir,
 
essaie de mettre un exit(); après chacun de tes header() ?

Reply

Marsh Posté le 24-04-2009 à 09:12:42    

Merci j'essaierai cela dès que j'ai 5 min je suis sur plusieur projet a la fois et donc c'est en fonction de l'ordre prioritaire ^^ des choses
 
mais j'essaierais et je tiendrais au courant merci

Reply

Sujets relatifs:

Leave a Replay

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