Header qui plante

Header qui plante - PHP - Programmation

Marsh Posté le 18-08-2008 à 17:53:10    

Salut (oui encore moi et pr encore 1 an au moins...)
 
Toute ma page Index.php est composé d'include dont une pour la partie principale dans laquelle s'affiche le contenu du site.
Afin de ne pas tenter les Hackers de 10 ans et moins je voulais sécuriser cette partie en utilisant le code de NazzTazz publié dans la partie "blabla@php | faq et bonnes pratiques"
 
Voici le code publié par NazzTazz:

Code :
  1. <?php
  2.     $pages_ok = array('accueil', 'categorie', 'produit');
  3.     if (in_array($_GET['page'], $pages_ok)) {
  4.          include $_GET['page'].'.php';
  5.       } else {
  6.          header ('HTTP/1.1 404 Not Found');
  7.          die();
  8.       }
  9. ?>


 
Mtnt voici le mien adapté à mes besoins:

Code :
  1. <?php
  2.   // On définit le tableau contenant les pages autorisées
  3.   // ----------------------------------------------------
  4.    $pageOK = array( 'accueil' => 'ACCUEIL/accueil.php',
  5.    'agenda' => 'agenda.php', 'actualite' => 'actualite.php');
  6.   // On teste que le paramètre d'url existe et qu'il est bien autorisé
  7.   // -----------------------------------------------------------------
  8.    if ( in_array($_GET['page'], $pageOK)) {
  9.      include $_GET['page'].'.php'; 
  10.    } else {
  11.      header ('HTTP/1.1 404 Not Found');
  12.      die ();
  13.    }
  14.   ?>


 
A titre d'info j'ai remplacé le code ci dessous par celui ci dessus  

Code :
  1. <?php
  2.   // On définit le tableau contenant les pages autorisées
  3.   // ----------------------------------------------------
  4.    $pageOK = array(
  5.        'accueil' => 'ACCUEIL/accueil.php',
  6.        'agenda' => 'AGENDA/agenda.php',
  7.        'actualité' => 'ACTUALITE/actualite.php',
  8.        'publications' => 'PUBLICATIONS/publications.php',
  9.        'comite' => 'COMITE/comite_contact.php',
  10.        'presentation' => 'CDH/cdh_presentation.php',
  11.        'local' => 'CDH/LOCAL/cdh_local.php',
  12.        'national' => 'CDH/NATIONAL/cdh_national.php',
  13.        'arrondissement' => 'ARRONDISSEMENT/arrondissement.php',
  14.        'forum' => 'FORUM/phpbb2/index.php',
  15.        'galerie' => 'GALERIE/index.php',
  16.        'news' => 'newsletter/inscription.php',
  17.        'liens' => 'LIENS/liens.php',
  18.        'contacts' => 'CONTACTS/contacts.php',
  19.        'apropos' => 'EXTRANET/apropos.html',
  20.        );
  21.   // On teste que le paramètre d'url existe et qu'il est bien autorisé
  22.   // -----------------------------------------------------------------
  23.    if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
  24.    include($pageOK[$_GET['page']]);   // Nous appelons le contenu central de la page
  25.    } else {
  26.    include('ACCUEIL/accueil.php');   // Page par défaut quant elle n'existe pas dans le tableau
  27.    }
  28.   ?>


 
pour appeler mes pages j'utilise l'URL au format suivant: index.php?page=accueil
 
Le problème ? PHP me retourne une erreur à chaque fois. J'ai dj essayé pas mal de solution mais apparemment aucune ne convient... Voici le message que je reçois:  Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\CDH_V4.0\Index.php:34) in C:\wamp\www\CDH_V4.0\corps.php on line 23
 
Une idée pr résoudre ce problème?

Reply

Marsh Posté le 18-08-2008 à 17:53:10   

Reply

Marsh Posté le 18-08-2008 à 17:58:37    

quand il te marque ca c'est que tu fait affiche quelque chose avant ton header,
tu as rien qui est affiché avant le message d'erreur
(genre un echo qui traine, ou une page affiché avec un includ)
si c'est ca ben alors supprime le , car il ne faut rien afficher avant un header().
 
sinon je comprend pas trop la structure de ta page,avec tous tes petits morceaux de code, je sais pas quel y est ou pas?

Message cité 1 fois
Message édité par infoman64 le 19-08-2008 à 12:01:05
Reply

Marsh Posté le 19-08-2008 à 11:42:06    

infoman64 a écrit :

quand il te marque ca,
tu as rien qui est affiché avant le message d'erreur
(genre un echo qui traine, ou une page affiché avec un includ)
si c'est ca ben alors supprime le , car il ne faut rien afficher avant un header().
 
sinon je comprend pas trop la structure de ta page,avec tous tes petits morceaux de code, je sais pas quel y est ou pas?


 
 
+ 1, il ne faut rien envoyer au navigateur. Un ou des espaces suffisent également avant l'ouverture ou aprés la  fermeture des balises <?php , ?>, pour voir apparaître ce genre de message. Il faut qu'il passe tout les fichiers qu'il intégre en revue, qu'il regarde les echo, comme tu dis mais aussi les blanc qui peuvent faire planter un programme lamentablement...:/  
 

Reply

Marsh Posté le 27-08-2008 à 12:49:26    

De toutes façons, débuter par un ob_start(); ne tue personne
( et permet notamment de balancer toutes les sessions,headers,cookies que tu veux dans le cheminement de ton code ) :D


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

Sujets relatifs:

Leave a Replay

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