#1 Le 27/08/2012, à 13:45
- Vuel
[Résolu]PHP - header qui marche (curieusement) entre balises HTML
Bonjour à tous !
Désolé pour ce titre un peu farfelu, je cherche à comprendre le pourquoi du comment de l'header PHP :
Je vous explique le soucis :
J'ai un formulaire de connexion basique sous un serveur WAMP à mon boulot et sur mon movamp perso :
connexion.php
<?php
include('include.php')
$error = "";
if(isset($_POST["login"]) && isset($_POST["pass"])) {
$login = mysql_real_escape_string ($_POST['login']);
$pass = mysql_real_escape_string (sha1($_POST ['pass']));
$resultat_login= mysql_query("SELECT * FROM profil WHERE login = '$login' AND pass = '$pass');
$done= mysql_fetch_array($resultat_login);
if (!empty($done['login']))
{
$_SESSION['user'] = $done['login'];
header("Location:accueil.php");
}
else
{
$error="Mauvais identifiant et/ou mot de passe";
}
}
?>
<center>
<h1 class="titleindex" >administration</h1>
<div id="global">
<form method='post' action='#'>
<fieldset>
<p class="error" id="error">{$error}</p>
<legend class="titlelegend">Authentification</legend>
<label class="labelindex" for = 'login'> email </label>
<input class="inputindex" type ='text' name = 'login' id ='login'></input><br/>
<label class="labelindex" for = 'pass'> Mot de passe </label>
<input class="inputindex" type ='password' name = 'pass' id ='pass'></input><br/>
<br/>
<input class="connectindex" type='submit' action='Envoyer' value="Connexion"><br/>
</fieldset>
</form>
</div>
</center>
Je ne vous cache aps que dans l'include il y a toutes les balises html avec le JS :
include.php
session_start();
include("BDD.php");
<head>
<link rel='stylesheet' media='screen' href='../css/style.css' />
<script type='text/javascript' src='../js/verification.js'></script>
</head>
Nous serrons je pense d'accord de dire que normalement, à cause de l'include, le header du connexion.php devrait me retourner la traditionnel :
Warning: Cannot modify header information - headers already sent by
Et bien sur le serveur wamp la redirection ce fait bien alors que je devrais avoir l'erreur, qui apparait bien sur le movamp !
Je pense que ça vient du serveur car le code que je vous expose est très simplifié comparé au mien, mais je retrouve le même problème, celui-ci marche sous wamp alors que je devrais avoir l'erreur .
J'ai fais plusieurs test du genre simplement :
include("include.php");
header("Location:test.php");
A chaque fois tout fonctionnes sur le WAMP.
Si quelqu'un a une piste je suis preneur car rien n'est marqué dans la doc et rien sur internet me permet de penser que l'header peut être mit après du HTML.
Merci de votre lecture
edit :
Même avec ce bout de cote la redirection ce fait
<html>
<head>
<title> Coucou</title>
<body>
<?php
header("Location:test.php");
?>
</body>
</html>
Dernière modification par Vuel (Le 28/08/2012, à 08:23)
Hors ligne
#2 Le 27/08/2012, à 13:54
- Mathieu147
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
Bonne question! Ça m'intéresse aussi.
Tu as une faute de frappe dans ta requête SQL (ANS → AND)
Pffff…
Hors ligne
#3 Le 27/08/2012, à 13:56
- Vuel
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
Merci, j'ai refait un code vite fait pour illustrer .
En tout cas, je n'ai rien trouvé nulle part, site Français/Anglais, doc PhP, rien
Hors ligne
#4 Le 27/08/2012, à 14:00
- pires57
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
tu as essayer de remplacer ton include par un require_once?
si mes souvenir sont bon ton "!empty" vérifie ici que ta variable n'est pas une chaine vide or elle ne l'es pas dans ton exemple si tu tape ton mot de passe.
Dernière modification par pires57 (Le 27/08/2012, à 14:08)
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#5 Le 27/08/2012, à 14:09
- Vuel
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
La même chose, la redirection ce fait sous wamp, l'erreur apparait sous movamp.
Ce n'est pas le !empty qui me pose soucis et je le fais sur un retour du fetch_array, je verifie que mon tableau $done['login'] n'est pas vide
Dernière modification par Vuel (Le 27/08/2012, à 14:11)
Hors ligne
#6 Le 27/08/2012, à 14:19
- Netux
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
En effet...
Laptop ASUS X73SV: Intel Core i5-2430M @ 2,4GHz ~ 3,1GHz + Intel HD 3000 / NVIDIA GT 540M + 6Go RAM + 2 X 640 Go
OS: Ubuntu 12.10 64bits + Kali Linux 1.0.2 64bits
Hors ligne
#7 Le 27/08/2012, à 14:27
- pires57
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
tu n'as aucun message d'erreur dans le fichier d'erreur d'apache?
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#8 Le 27/08/2012, à 14:28
- ssdg
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
Perso, je partirait sur une histoire de mise en cache de la page. J'ai déjà eu un collègue qui connaissait le PHP du point de vue technique mais qui était un peu déraisonnable qui disait:
Tu veux mettre une redirection en plein milieu d'une page de 500Mo? (j'exagère un peu dans ma reconstitution)
Facile! Active le cache et met ton php_header en plein milieu.
À partir de ça, j'aurais tendance à me dire que ce qui se passe est:
1) je commence à remplir mon cache
2) je met mon php_header, ça passe et le header part en premier
3) j’atteins la limite du cache et le début de la page est écrit dans le flux réseau.
Un phénomène similaire peut se voir avec un programme en C qui écrirait dans stderr et stdout. (les sorties standard et d'erreur)
Edit: pour ceux qui cherchent une erreur, si c'est bien ça, ne cherchez pas, ce n'en est pas une, c'est juste une abomination que permet PHP et qui est très bien documentée. (pourquoi abomination? parceque les headers sont la couverture de la page à venir. Si le client reçoit la couverture au fur et à mesure de la lecture de la page, elle ne sert plus à rien. (image alternative: on a d'abord l'enveloppe dans les mains avant de lire le courrier qui est dedans)
Dernière modification par ssdg (Le 27/08/2012, à 14:31)
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#9 Le 27/08/2012, à 14:34
- Jules Petibidon
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
A vue de pied, c'est sûrement une directive de configuration de WAMP, à voir peut être dans le phpinfo. Soit une directive concernant l'output buffering, soit même un auto prepend file qui déclenche l'output buffering (moins probable)
Hors ligne
#10 Le 27/08/2012, à 14:55
- Vuel
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
pires57 -> aucune erreur coté wamp, en tout cas rien de visible
ssdg -> comme je l'ai expliqué j'ai essayé de le faire avec des pages très minimaliste en prenant soin de faire un ctrl+F5 à chaque rechargement et j'avais toujours le même soucis.
Julmes Petibidon -> Qu'est ce que je dois chercher exactement ? Une commande dans le php info qui me permettrais de faire des redirections magiques ? Comment vérifier cette hypothése ?
Merci de vos réponses
Hors ligne
#11 Le 27/08/2012, à 15:09
- mazarini
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
Voir dans php.ini le paramètre : output_buffering
Si tu ne veux/peux pas modifier php.ini, utilise la fonction ob_start() en début de script.
De mémoire, le même problème se produit avec les cookies.
Sur le principe le mieux est de faire le traitement puis d'afficher la page. Pas de problème dans ce cas.
S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)
Hors ligne
#12 Le 27/08/2012, à 15:20
- Vuel
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
Jules Petibidon et Mazarini on vue juste, en activant l'output_buffering dans le movamp la redirection ce fait bien.
Donc, est-ce une bonne chose de l'activer ou pas ?!
Et si on l'active est-ce une bonne choses de profiter pour faire les redirections en header() ?!
Merci de vos réponses
Dernière modification par Vuel (Le 27/08/2012, à 15:43)
Hors ligne
#13 Le 27/08/2012, à 16:02
- Jules Petibidon
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
Non, c'est une très mauvaise chose.
Et c'est une vaste connerie de WAMP de l'activer par défaut
Le mieux serait de le désactiver dans le php.ini de WAMP, et de modifier ton code en conséquence si tu plantes.
Hors ligne
#14 Le 27/08/2012, à 16:03
- mazarini
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
J'ai l'habitude de faire du buffering et en cas d'erreur, j'annule la sortie en cours et j'affiche la page d'erreur.
Par contre, je ne commence l'affichage qu'après la fin des traitements.
S'il existait une école de la politique, les locaux devraient être édifiés rue de la Santé. Les élèves pourraient s'habituer. (Pierre Dac)
Hors ligne
#15 Le 28/08/2012, à 08:20
- Vuel
Re : [Résolu]PHP - header qui marche (curieusement) entre balises HTML
D'accord merci pour vos réponses, je vais me documenter sur l'OB et du coup je pense remanier mon code
Sujet résolut ^^
Hors ligne