[PHP] header sans effet

header sans effet [PHP] - PHP - Programmation

Marsh Posté le 02-10-2008 à 14:17:33    

Bonjour,
 
J'ai un problème assez étrange avec un header("Location..." ) qui ne veut pas fonctionner. Mais je n'ai pas d'erreur affichée pour autant (et j'ai bien activé l'affichage des erreurs, c'est pas l'erreur classique du "header already sent" ;)).
 
En gros j'ai une page de base, dont voici le début :

Code :
  1. <?php
  2.  $authLevel = 10;
  3.  include("php/authentification.php" );
  4. ?>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/\
  6. xhtml1/DTD/xhtml1-strict.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  8. [...]


 
Et voici le "authentification.php" :

Code :
  1. <?php
  2.  if (!isset($_SESSION["power"])) {
  3.    $_SESSION["power"] = 1;
  4.  }
  5.  $power = $_SESSION["power"];
  6.  if ($power < $authLevel) {
  7.      header("Location: error.php?id=level" );
  8.      echo "Login please";
  9.    }
  10.  }
  11. ?>


 
Et donc la commande header() n'a aucun effet. J'ai déjà regardé plusieurs pistes sur les conflits possibles entre include(), header() et session_start() mais je n'ai pas l'impression que mon code soit mal foutu :/. Des idées ?

Reply

Marsh Posté le 02-10-2008 à 14:17:33   

Reply

Marsh Posté le 02-10-2008 à 14:57:46    

Je me réponds à moi-même parce que j'ai trouvé une partie de la solution à mon problème : ma page de base est en fait un header.php dont je me sers pour modifier l'apparence de la page d'index par défaut d'Apache (avec la directive HeaderName). Et manifestement, dans ce cas précis, la redirection ne fonctionne pas. Le problème reste le même : comment faire pour que mon header() marche [:atlantis] ?

Reply

Marsh Posté le 02-10-2008 à 15:20:08    

@header pour tous tes headers successifs ( potentiels dans ton code )
+ supprimer le moindre output avant ton header ( les espaces toussa )
=> Le mieux est de faire le tampon en début de fichier ( c'est crade mais tous tes headers passeront )


Message édité par grosbin le 02-10-2008 à 15:21:15

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 02-10-2008 à 15:41:13    

Euh, c'est pas vraiment mon problème en fait :D.
J'ai continué à chercher, le problème vient bien du fait que je tente de faire un header() directement dans la page par défaut.
Donc voilà le tout début de mon fichier header.php (et y'a vraiment pas de caractères avant) :

Code :
  1. <?php
  2. ?>


Si j'accède à cette page en précisant son url, la redirection s'effectue. En revanche, si j'accède juste à la racine de mon serveur, cette page est bien appelée (via le mod_autoindex() et HeaderName), mais le header() reste sans effet, et pas de message d'erreur.
Et le plus fort, c'est que si je modifie pour avoir ceci :

Code :
  1. <?php
  2.  echo "coin coin !";
  3. ?>


j'ai ceci qui s'affiche :

Citation :

coin coin !
Warning: Cannot modify header information - headers already sent by (output started at /usr/share/apache2/common/blabla/header.php:2) in /usr/share/apache2/common/blabla/header.php on line 3


Donc là, l'erreur est logique mais ça veut dire qu'il prend en compte le header() alors qu'il ne semble pas le faire dans le premier cas [:almar] !
C'est vraiment bizarre comme problème, mais je suis quand même pas le premier à avoir ce problème j'espère ! :lol:

Reply

Marsh Posté le 02-10-2008 à 21:41:06    

headers already sent by (output started at /usr/share/apache2/common/blabla/header.php:2)
je l'ai déjà dis une fois ..


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 02-10-2008 à 22:05:23    

grosbin a écrit :

headers already sent by (output started at /usr/share/apache2/common/blabla/header.php:2)
je l'ai déjà dis une fois ..


Donc t'as réussi à me répondre deux fois sans lire mes posts [:implosion du tibia]. Merci de faire partager ton savoir [:cend].

Reply

Marsh Posté le 03-10-2008 à 09:21:33    

C'est louche ton truc...faire un header('Location: ...') dans un fichier appelé via la directive HeaderName de mod_autoindex ça me parait étrange...
HeaderName est là pour inclure une entête automatiquement dans ta page, et je pense pas que le mod_autoindex soit capable de suivre une redirection http pour inclure ce qu'il y a au bout...

 

Message cité 1 fois
Message édité par skeye le 03-10-2008 à 09:21:41

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 03-10-2008 à 09:55:32    

skeye a écrit :

C'est louche ton truc...faire un header('Location: ...') dans un fichier appelé via la directive HeaderName de mod_autoindex ça me parait étrange...
HeaderName est là pour inclure une entête automatiquement dans ta page, et je pense pas que le mod_autoindex soit capable de suivre une redirection http pour inclure ce qu'il y a au bout...
 


Ouais, visiblement mon problème est insoluble :/. L'idée de base (comme on voit dans le premier post), c'était d'ajouter à la page d'index un petit système d'authentification. Tant pis, je vais faire autrement.

Reply

Marsh Posté le 03-10-2008 à 19:18:14    

Et avec :
 

Code :
  1. <?php
  2. ?>


 
Ca donne quoi ?

Message cité 1 fois
Message édité par Profil supprimé le 03-10-2008 à 19:18:44
Reply

Marsh Posté le 03-10-2008 à 20:43:59    


Rien non plus, j'ai vraiment tout essayé pour les paramètres (même google.com donc :D). Si vraiment il y a une solution à mon problème, ça doit être au niveau de la conf' de quelque chose quoi. Mais finalement, j'ai contourné le problème d'une autre manière ;).

Reply

Marsh Posté le 03-10-2008 à 20:43:59   

Reply

Marsh Posté le 05-10-2008 à 10:47:25    

Tu as tracé les entêtes avec un analyseur d'entête (sous firefox il existe une extension). Ca te permettra de comprendre ;)

Reply

Marsh Posté le 05-10-2008 à 16:44:17    

Hello,
 
Je pense qu'il manque un

Code :
  1. exit();

après les headers.

Reply

Marsh Posté le 05-10-2008 à 17:29:02    

sub1 a écrit :

Hello,
 
Je pense qu'il manque un

Code :
  1. exit();

après les headers.


non.


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

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