[Résolu] Includes ne fonctionnent plus depuis session

Includes ne fonctionnent plus depuis session [Résolu] - PHP - Programmation

Marsh Posté le 12-01-2008 à 22:20:33    

Bonjour à tous,
 
Les includes de ma page admin ne fonctionnent plus depuis que j'ai sécurisé la page avec des sessions.
 
Page admin :

Code :
  1. <?php
  2. session_start();
  3. define('INCLUDE', true);
  4. include('includes/config.inc.php');
  5. include('includes/secure.inc.php');
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
  9. <head>
  10. <title>Page d'administration</title>
  11. <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
  12. <link rel="stylesheet" type="text/css" href="styles/main.css" />
  13. </head>
  14. <body>
  15. <div id="all">
  16. <div id="cadre_site">
  17.  <div id="nav">
  18.   <table width="100%" border="0">
  19.    <tr>
  20.     <td width="20%" align="center"><img src="images/logout.gif" alt="D&eacute;connexion" /></td>
  21.     <td width="80%"><a href="main.php?logout" class="nav">D&eacute;connexion</a></td>
  22.    </tr>
  23.    <tr>
  24.     <td width="20%" align="center"><img src="images/lien.gif" alt="Liens" /></td>
  25.     <td width="80%"><a href="?page=addlink" class="nav">Ajout d'un lien</a></td>
  26.    </tr>
  27.    <tr>
  28.     <td width="20%" align="center"><img src="images/news.gif" alt="News" /></td>
  29.     <td width="80%"><a href="?page=news" class="nav">Gestion des news</a></td>
  30.    </tr>
  31.   </table>
  32.  </div>
  33.  <div id="main">
  34.   <?php
  35.    switch($_GET['page'])
  36.    {
  37.     case 'addlink' : include ("includes/addlink.php" ); break;
  38.     case 'news' : include ("includes/news.php" ); break;
  39.     default : include ("includes/addlink.php" ); break;
  40.    }
  41.   ?>
  42.  </div>
  43. </div>
  44. </div>
  45. </body>
  46. </html>

Pouvez-vous m'aider s'il vous plait ?


Message édité par Gavrinis le 14-01-2008 à 19:47:53
Reply

Marsh Posté le 12-01-2008 à 22:20:33   

Reply

Marsh Posté le 13-01-2008 à 02:15:51    

J'ajoute que quand je commente les lignes 35 à 42 tout se passe bien hormis le fait que les includes ne fonctionnent plus mais ceci est logique :D.
 
J'ai trouvé d'autres personnes qui on eut le même problème que moi (celle-ci et celle-là) mais leur solution ne m'a pas aidé :(.

Reply

Marsh Posté le 13-01-2008 à 09:52:36    

c'est quoi le problème ?


---------------
oui oui
Reply

Marsh Posté le 13-01-2008 à 10:57:09    

Que mes includes (lignes 35 à 42) ne fonctionnent plus.
Quand je me logue j'ai une erreur de redirection d'header (celle qui renvoit à la page d'authentification si le mot de passe ou login ne sont pas bon) donc il veut m'éjecter mais n'y parvient pas, sûrement à cause d'un bout de code HTML plus haut (je vais y regarder ;)).
En cherchant à mettre le doit sur le problème, j'ai essayé avec une page qui ne contenant pas les includes de mes lignes 35 à 42 et tout s'est passé pour le mieux, je n'avais plus la moindre erreur et il me laissait logué

Reply

Marsh Posté le 13-01-2008 à 11:24:03    

Edit: Dans un soucis de sécurité pour mon futur site, j'ai préféré supprimer ce post afin qu'on ne puisse voir mon code.
 
Merci de respecter mon choix.
Vous trouverez tout de même la solution en fin de topic


Message édité par Gavrinis le 14-01-2008 à 20:03:14
Reply

Marsh Posté le 13-01-2008 à 13:47:15    

Tu as quelque chose qui print des caractères avant l'appel a un header. ca peut etre un echo ou un caractere html qui traine avant, voir juste un espace avant un <?php
 

Code :
  1. header("mlkmkml" );
  2. echo "pouet";


est valide
 

Code :
  1. echo "pouet";
  2. header("mlkmkml" );


est invalide


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 13-01-2008 à 14:00:12    

oui je sais que je ne peux mettre d'echo, print, HTML, espace avant un header :jap:

Reply

Marsh Posté le 13-01-2008 à 14:04:31    

le seul echo que j'ai est "echo"420 File is included in software.";" mais il n'en tient pas compte vu que ma constante INCLUDE est définie.

Reply

Marsh Posté le 13-01-2008 à 14:33:04    

j'ai beau commenter du code au supprimer certaines parties en début de page, il me dit toujours que l'erreur est en ligne 19 pour main.php et 44 pour secure.inc.php :??: c'est à n'y rien comprendre

Reply

Marsh Posté le 13-01-2008 à 14:41:23    

Code :
  1. echo "420 File is included in software.";


j'ai l'impression qu'il manque un espace après le echo.
 
essaye de mettre un espace. si il n'y en a pas.
après si il y a toujours l'erreur, met la ligne en commentaire pour vérifier que ca vient de ca ou non. Si ce n'est pas le cas, c'est que c'est peut être un peu plus subtil :D


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 13-01-2008 à 14:41:23   

Reply

Marsh Posté le 13-01-2008 à 16:55:26    

oui je sais, j'ai déjà enlevé l'espace mais ça n'a rien changé

Reply

Marsh Posté le 13-01-2008 à 17:03:16    

c'est bizarre que tu n'aies plus l'erreur quand tu commentes les lignes en dessous :??:

 

t'appelles pas secure.php dans un des fichiers inclus ?


Message édité par art_dupond le 13-01-2008 à 17:04:35

---------------
oui oui
Reply

Marsh Posté le 13-01-2008 à 17:07:13    

non :(

Reply

Marsh Posté le 13-01-2008 à 17:48:53    

zapan666 a écrit :

[code]met la ligne en commentaire pour vérifier que ça vient de ça ou non.


ça n'a rien changé :(

Reply

Marsh Posté le 13-01-2008 à 20:39:30    

commente tout et décommente petit à petit jusqu'à ce que plante


---------------
oui oui
Reply

Marsh Posté le 13-01-2008 à 20:57:09    

le problème semble venir du switch car une fois commenté l'erreur disparait et une fois décommenté l'erreur resurgi.

Reply

Marsh Posté le 13-01-2008 à 23:12:57    

une erreur dans ton secure.inc.php :  
- session_destroy() ne sera jamais appelé, la redirection est faite avant !
place le avant un header();
 
histoire de faire le ménage :  
- assure toi qu'il n'y ai aucun espace au dessus d'un <?php session_start(); ...
- $HTTP_SERVER_VARS : obsolete depuis des années, utilise $_SERVER
- header("..." ."" ) ...-> "" ne sert strictement à rien

Message cité 1 fois
Message édité par Profil supprimé le 13-01-2008 à 23:13:23
Reply

Marsh Posté le 14-01-2008 à 05:42:08    

Et la ligne 19 de main.php elle est où :??:  
 
Ca veut dire que dans tes pages inclues y'a un truc qui sort avant que le header arrive, ça on a tous compris. Maintenant faut le chercher tranquillement :D Profil progressivement ton code jusqu'à arriver là tu trouveras surement la petite connerie qui te fait perdre ton temps et tes cheveux :D
 
T'utilises pas les tampons, ça peut parfois te donner du fil à retordre si c'est mal synchronisé avec les sorties de toutes l'appli :??: Cf php.ini aussi ;)

Reply

Marsh Posté le 14-01-2008 à 10:31:00    

leflos5 a écrit :

Et la ligne 19 de main.php elle est où :??:  
 
Ca veut dire que dans tes pages inclues y'a un truc qui sort avant que le header arrive, ça on a tous compris. Maintenant faut le chercher tranquillement :D Profil progressivement ton code jusqu'à arriver là tu trouveras surement la petite connerie qui te fait perdre ton temps et tes cheveux :D
 
T'utilises pas les tampons, ça peut parfois te donner du fil à retordre si c'est mal synchronisé avec les sorties de toutes l'appli :??: Cf php.ini aussi ;)


ca veut dire quoi ? :jap:


---------------
oui oui
Reply

Marsh Posté le 14-01-2008 à 11:10:39    

merci pour ces conseils :jap:
 

leflos5 a écrit :

Et la ligne 19 de main.php elle est où :??:  
 
Ca veut dire que dans tes pages inclues y'a un truc qui sort avant que le header arrive, ça on a tous compris. Maintenant faut le chercher tranquillement :D Profil progressivement ton code jusqu'à arriver là tu trouveras surement la petite connerie qui te fait perdre ton temps et tes cheveux :D
 
T'utilises pas les tampons, ça peut parfois te donner du fil à retordre si c'est mal synchronisé avec les sorties de toutes l'appli :??: Cf php.ini aussi ;)

La ligne 19 n'a pas lieu d'être une erreur vu que c'est un "table" donc je pense aussi que ça vient d'un fichier inclus. Il y a bien des headers dans "secure.inc.php" mais ils ne font effect que lors d'un problème et il n'y a pas de problème vu que quand je commente mes lignes d'inclusions (35 à 42) tout se passe sans problème.

Reply

Marsh Posté le 14-01-2008 à 14:30:53    

Tampon = buffer, ça met les sorties en tampon et ça vide quand tu demande, si tu demande trop tôt ça part, ou ça part si la config est mal faite et vide au bout de x octets :)
 
ob_start(), ob_*
 
Au pire essaye de voir si ça résoud temporairement ton problème mais faudra bien trouver cette vilaine sortie cachée :D

Reply

Marsh Posté le 14-01-2008 à 17:29:27    

non malheureusement ça ne change rien :(

Reply

Marsh Posté le 14-01-2008 à 18:24:14    

leflos5> ah ok j'avais bien pensé comprendre ça mais j'avais du mal à lire les mots dans le bon ordre :p

 


Gavrinis> tu peux poster les codes complets de tes fichiers (sans les données de connexion) ?

 

y compris de addlink.php


Message édité par art_dupond le 14-01-2008 à 18:24:57

---------------
oui oui
Reply

Marsh Posté le 14-01-2008 à 18:37:40    

As-tu des espaces ou des sauts de ligne à la fin de tes fichiers inclus juste après le "?>" ?

Reply

Marsh Posté le 14-01-2008 à 18:59:51    

non il n'y a aucun espace ou sauts de ligne

Reply

Marsh Posté le 14-01-2008 à 19:21:58    

Edit: Dans un soucis de sécurité pour mon futur site, j'ai préféré supprimer ce post afin qu'on ne puisse voir mon code.
 
Merci de respecter mon choix ;)
 
------------------------------------------------
 
A ceux qui on le même problème que moi, j'incluais des pages sur une page squelette et j'avais fait la bêtise d'inclure une fois un fichier dans ma page d'inclusion et d'inclure le même fichier une autre fois dans le code de ma page qui allait être incluse.
 
En bref "include('toto.php') ---> require_once('toto.php') // voici la solution


Message édité par Gavrinis le 14-01-2008 à 20:01:38
Reply

Marsh Posté le 14-01-2008 à 19:32:21    

ben voilà, tu inclus bien secure.php dans addlink.php


---------------
oui oui
Reply

Marsh Posté le 14-01-2008 à 19:36:11    

mais je dois bien protéger la page addlink.php tout de même :sweat:

Reply

Marsh Posté le 14-01-2008 à 19:42:44    

oui mais alors tu ne dis pas que tu n'inclus pas secure.php dans les fichiers inclus :o
 
tu peux utiliser require_once('secure.php');
 
comme ça s'il est déjà inclus, il ne le sera plus, donc ne sera inclus à cet endroit que si addlink est appelé directement


---------------
oui oui
Reply

Marsh Posté le 14-01-2008 à 19:42:45    

que dois-je virer de ces lignes, dans addlink.php ?

Code :
  1. <?php
  2. session_start();
  3. define('INCLUDE', true);
  4. include('config.inc.php');
  5. include('secure.inc.php');
  6. ?>

Reply

Marsh Posté le 14-01-2008 à 19:44:39    

sinon, les fichiers qui ne sont que inclus (qui ne sont jamais appelés directement) peuvent êtres mis en dehors de l'arborescence du site ou dans un répertoire protégé

  

ps: je ne sais pas si t'as vu mon message précédent, on a posté en même temps ;)


Message édité par art_dupond le 14-01-2008 à 19:45:13

---------------
oui oui
Reply

Marsh Posté le 14-01-2008 à 19:47:22    

oui j'ai vu :)
 
en tout cas c'est résolu, un grand merci à vous tous et tout particulièrement à toi Art_dupond ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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