Problème avec header('location:...')!

Bonjour à tous,

Voilà mon problème :
Sur les pages de mon site perso, je fais un contrôle de session pour vérifier si la session a expiré ou pas.
Pour ça j’ai un fichier de fonctions où j’aurai la fonction controle_session() et les pages de mon site qui appel cette fonction en premier sans echo avant.

Voici un morceau de code abrégé pour illustrer le problème :

fonctions.php :


function controle_session () {
     return true;      // pour l'instant je change le retour par true ou false pour tester simplement
}

admin.php :


     include("parametres.inc.php");
     require("fonctions.php");

     if (controle_session())
          affiche la page
     else
          header('location:index.php'); // redirection vers index.php pour authentification

Lorsque je retourne true, la page s’affiche bien mais lorsque je retourne false j’ai une page blanche sans message d’erreur et la redirection ne se fait pas.
Après quelque test, je me suis rendu compte que le fichier “fonctions.php” posait problème.
Il semble que “return” effectue une sortie pas comme “echo” mais doit envoyer quelque chose qui bloque la redirection.

Quelqu’un peut-il m’aider ? je suis totalement bloqué et je ne vois pas comment faire autrement.

Merci à tous pour vos réponses

Le site fonctionne avec la suite WAMP Server
Edité le 24/07/2009 à 09:42

C’est pas Location plutot, avec le L majuscule ?

J’ai déjà essayé mais ça ne change rien du tout :frowning:
Edité le 24/07/2009 à 09:59

Passe le error_reporting à E_ALL, et le display error aussi, tu as surement une erreur mais php l’affiche pas :


// Au debut du programme
ini_set( "error_reporting", E_ALL );
ini_set( "display_errors", "1" );

Edité le 24/07/2009 à 10:01

Concrètement avec ces deux lignes de codes, je devrais obtenir quoi?

Une erreur, disant pourquoi ton header marche pas.


Essais ca quand meme :

header('Location: index.php');

J’ai commenté tout mon code HTML et PHP pour laisser le strict minimum et j’ai rien qui s’affiche.

Tu peut copier collé le code en question ?

J’ai essayé ça aussi mais rien y fait.
Soit dit en passant, quand je fais if (true) ou if (false) ca fonctionne correctement.

Ma fonction retourne juste “true” ou “false” mais le “return” c’est un output, est-ce que ça peut poser problème comme avec un echo?

Quesque tu veux dire par “c’est un output” ?

admin.php :

<?php
	ini_set( "error_reporting", E_ALL );
	ini_set( "display_errors", 1 );
	include_once("../parametres.inc");
	include_once("../fonctions.php");
if (controle_session())
{
	
	xhtml();
	
	menu_administration();
	
	html_corps();
?>
	<h1>administration</h1>
<?php
	html_pied_de_page();
} else header('Location:'.DIR);
?>

fonctions.php :

function controle_session () {
		return (false);
	}


if( controle_session() === true ) {

} else {

}

:neutre:

Pas besoin des () autour du false dans la fonction.
Edité le 24/07/2009 à 10:11

Avec ou sans ça ne fonctionne pas.
Quand je dis output, je veux dire qu’il fait une sortie avec return alors je ne sais pas si ça pose problème

Bah c’est la seul solution pour faire une condition sur la fonction de toutes facons.


$maVar = controle_session();
var_dump( $maVar );

Ca te sort quoi ?

OK précision, je viens de tester la fonction controle_session() dans mon fichier d’admin et là ça fonctionne correctement…
Y’a-t-il un problème entre header et include?


il me retourne "bool(false)"

Tu aurais pas un espace qui traine dans un des tes includes/require au dessus. (Mais avec le reporting il devrais t’affiché une erreur… ) On sait jamais.

nan pas d’espace et rien de signalé avec reporting mais je comprend pas pourquoi la fonction tourne bien dans le fichier lui-même alors qu’il ne fonctionne pas dans un autre fichier avec un include…


Bon j'ai testé la fonction dans mon fichier parametres.inc et ça fonctionne correctement en commentant l'include de fonctions.php. Je suis parti pour contrôler 800 lignes de codes :( Merci de m'avoir aidé

à bientôt ^^