Suivez les fils RSS
 
Auteur
yannneo
# 18 Mar 2010 - 10:51:45
Citer
17 Posts
Bonjour,

Depuis quelques jours et malgré les multitudes recherches sur le net, je n'arrive pas à faire fonctionner la redirection d'une page web.
Pour être sûr de ne pas avoir d'erreur dans mon code, j'ai créé un page php contenant simplement les lignes suivantes :

    header("Location:  http://www.google.fr/");
exit();


Je précise qu'il n'y a pas d'espaces ou de code html avant ces lignes.

Mais le résultat est une page vide... et les informations de l'en-tête http sont les suivantes :

Date: Thu, 18 Mar 2010 09:47:04 GMT
Server: Apache/2.2.14 (Win32) PHP/5.3.1
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

302 Found

Est-ce un problème de configuration lié à apache ou php ? Ou autre chose qui m'aurait échappé ?


Merci de votre aide !
Modifié par yannneo (19 Mar 2010 - 15:58)

^
Heyoan
# 18 Mar 2010 - 11:19:21
Citer
Modérateur
8101 Posts
Salut,

si vraiment tu n'as aucune sortie html avant (typiquement un vilain caractère BOM) cela vient effectivement de la config d'Apache.

^
yannneo
# 18 Mar 2010 - 15:48:56
Citer
17 Posts
Merci pour ta réponse.

Mais penses-tu que l'urlwriting (seule fonction que j'ai activé dans le fichier config d'apache) ait une influence sur la fonction header ?

Sinon que peut-on me conseiller pour remplacer cette fonction (notamment dans le fichier .htaccess) ?
Ci-dessous un bout de mon code :


// On teste si nos variables sont définies
if (isset($_POST['pseudo']) && isset($_POST['pswd'])) {

// On vérifie si le pseudo existe avant de procéder à la vérification du mot de passe
if ( checkPseudoExist( htmlentities ($_POST['pseudo']) ) ) {
$cryptedPswd = sha1($_POST['pswd'].$grainOfSalt);

session_start ();
// On enregistre les paramètres de notre visiteur comme variables de session
$_SESSION['pseudo'] = $_POST['pseudo'];
$_SESSION['pswd'] = $_POST['pswd'];

// On redirige notre visiteur vers une page de notre section membre
header('location: http://localhost:8080/monsite/users/member_index.php');
}
else {
// Le visiteur n'a pas été reconnu comme étant membre du site
echo '<body onLoad="alert(\'Identifiants non reconnus...\')">';
// Puis on le redirige vers la page d'accueil
echo '<meta http-equiv="refresh" content="0;URL=http://localhost:8080/monsite/index.php">';
}

...


Merci de ton aide.


^
Heyoan
# 18 Mar 2010 - 16:04:59
Citer
Modérateur
8101 Posts
yannneo a écrit :
Mais penses-tu que l'urlwriting (seule fonction que j'ai activé dans le fichier config d'apache) ait une influence sur la fonction header ?
Non mais par contre je pense que :
* avant de poser une nouvelle question ce serait bien de répondre à celle que j'ai posée plus haut : enregistres-tu tes pages en utf-8 avec BOM ?
* à priori tu es en local (EasyPHP ?) et si je comprends bien tu as désactivé tous les modules Apache paramétrés par défaut pour ne mettre que rewrite_module ? Si oui pourquoi ?

yannneo a écrit :
Sinon que peut-on me conseiller pour remplacer cette fonction (notamment dans le fichier .htaccess) ?
Euh... rien compris : le code PHP en question ne peut pas être remplacé par de l'urlrewriting !

Par ailleurs ton code comporte (au moins) une énormité :
echo '<body ... >'; 
suivi de
echo '<meta  ... >'; 

Modifié par Heyoan (18 Mar 2010 - 16:06)

^
yannneo
# 18 Mar 2010 - 16:22:33
Citer
17 Posts
J'utilise l'IDE Netbeans 6.8 pour coder mes lignes.
Je confirme bien que mes fichiers sont enregistrés au format utf-8 mais par contre pas moyen de savoir (de moins à ma connaissance) si c'est avec ou sans BOM.

Non je n'ai pas désactivé tous les modules, je n'ai activé en conséquence que le module suivant :
LoadModule rewrite_module modules/mod_rewrite.so
et modifiés les paramètres :
AccessFileName ...
et
AllowOverride ...

C'était juste pour avoir une adresse plus agréable à voir :
exp :
www.monsite.fr/index.php -> www.monsite.fr/


Concernant mon énormité :

echo '<body ... >';

suivi de

echo '<meta ... >';


étant débutant, je n'ai pas percuté l'aberration...

Merci de ta patience
Modifié par yannneo (18 Mar 2010 - 16:59)

^
Heyoan
# 18 Mar 2010 - 17:00:39
Citer
Modérateur
8101 Posts
yannneo a écrit :
J'utilise l'IDE Netbeans 6.8 pour coder mes lignes.
Du coup je ne vais pas pouvoir t'aider car je ne sais si ni où ça se paramètre. Par contre pour faire le test tu pourrais utiliser n'importe quel éditeur (genre Notepad si tu es sous windows) et faire un simple fichier test.php
<?php
header("Location: http://www.google.fr/");
exit();
?>
Si ça fonctionne c'est que c'est bien un problème de BOM ajouté par NetBeans.

yannneo a écrit :
étant débutant, je n'ai pas percuté aberration...
Ce n'est pas un problème de PHP mais d'HTML : les éléments META doivent être placés dans le HEAD et pas dans le BODY (cf. le Squelettor pour partir d'une bonne structure). Du coup la redirection via header doit forcément être faite avant le DOCTYPE et tu ne peut pas afficher directement ton BODY à ce moment là. D'ailleurs c'est un peu vilain d'utiliser un alert JavaScript : voir un exemple dans ce post.
Modifié par Heyoan (18 Mar 2010 - 17:03)

^
yannneo
# 19 Mar 2010 - 15:57:50
Citer
17 Posts
Bonjour Heyoan,

Pour ton information :

Après plusieurs jours de recherches, j'ai enfin trouvé le problème : il s'agissait d'un bug de ma version de PHP decu
Solution -> installation de la dernière version de PHP et la redirection avec la fonction header fonctionne parfaitement...

Ce fut long et laborieux biggol mais au final le problème a été résolu ravi

Merci encore pour ton aide

^
Heyoan
# 19 Mar 2010 - 16:10:47
Citer
Modérateur
8101 Posts
De rien ! jap

Et bravo pour ta ténacité ! clapclap

^