file_exists

Répondre
jackbocar
le 01/01/2008 à 18:02
jackbocar
Bonjour,

Sur un tableau comme celui-ci qui gère mes pages dans chacun de mes répertoires, peut-on y ajouter une sécurité du genre "file_exists".
Si oui, comment réécrire ce tableau ?

<?php
$page = (isset($_GET['page']) && $_GET['page'] != '') ? $_GET['page'] : 'home';
$allowedPages = array('home','page_1','page_2','page_3','page_4','page_5');
if (in_array($page, $allowedPages)) {
include $page . '.php';
} else {
?>
<table width="100%" border="0" align="center" cellpadding="2" cellspacing="10"><tr><td align="center"><strong>
Error : The Page You're Looking For Doesn't Exist <br /><br />
Erreur : La Page que Vous Cherchez N'existe pas !</strong></td></tr></table>
<a href="index.php?page=home" class="Lnav" title="Retour" />Home</a>
<?php
}
?>


Si c'est non, avez-vous un autre moyen de sécuriser plusieurs fichiers avec un seul "index.php" par répertoire, et une adresse : http://www.templiers.net/accusateurs/index.php?page=philippe-le-bel

Merci de votre aide

Jack Bocar
Keika
le 02/01/2008 à 03:53
Keika
tu peux utiliser file_exists pour verifier qu'un fichier existe (haha...) cependant il te faut le chemin complet et pas seulement le nom.
Le PHP --> C'est dur !
jackbocar
le 02/01/2008 à 11:01
jackbocar
Bonjour,

Merci de ta réponse, mais ça ne me donne pas une solution. J'ai

Si vous avez une solution, plutôt un modèle à me montrer, merci.


J'ai essayé le chemin complet comme tu me l'as suggéré, mais, après plusieurs tentatives, je n'y arrive toujours pas Voici la dernière :

<?php
if (file_exists(isset($_GET['http://www.php_5/file_exists/test/pages/home'])) && file_exists(isset($_GET['http://www.php_5/file_exists/test/pages/page_1'])) && file_exists(isset($_GET['http://www.php_5/file_exists/test/pages/page_2'])) && file_exists(isset($_GET['http://www.php_5/file_exists/test/pages/page_3'])) && file_exists(isset($_GET['http://www.php_5/file_exists/test/pages/page_4']))) {
$page = (isset($_GET['page']) && $_GET['page'] != '') ? $_GET['page'] : '';
$allowedPages = array('home','page_1','page_2','page_3','page_4','erreur');
if (in_array($page, $allowedPages)) {
include $page . '.php';
exit();
}
} else {
$message = 'Cette page n\'existe pas.';
?>
<?php
include('erreur.php');
}

if (isset($message)) {
echo '<br><center><h1>'.$message.'</h1></center>';
}
?>


Résultat : ma page d'erreur s'affiche, mon message d'erreur et mon menu :

ERREUR

Cette page n'existe pas.

Home
Page 1
Page 2
Page 3
Page 4

ma page index.php :

<?php
include (PATH_INCLUDE.'/test/pages/1_test.php');
?>


Merci

Jack Bocar
Keika
le 02/01/2008 à 14:57
Keika
heuu y'aurait pas comme une erreur ? $_GET['http://www.php_5/file_exists/test/pages/page_1'] ???
ca veut dire que tu as une url qui doit ressembler a ca:

http://www.php_5/file_exists/test/pages/page_1?http://www.php_5/file_exists/test/pages/page_1

ca me parait un peu bizarre. Et aussi y'a pas de .com ou .fr... Je rappelle que $_GET[] recevra les valeurs apres le point d'interrogation ? ou apres les esperluettes & dans ton URL et non pas toute l'url.

Deja corrige ca et recommence,

courage :D
Le PHP --> C'est dur !
jackbocar
le 02/01/2008 à 17:07
jackbocar
Bonjour,

Je rappelle que $_GET[] recevra les valeurs après le point d'interrogation ?

Ca je suis d'accord, la valeur renvoyée après ? Est home ou page_1 ou page_2 etc.

Sur mon site de test, l'url affichée dans la barre d'adresse pour mon script est :
http://www.php_5/file_exists/index.php?page=home
http://www.php_5/file_exists/index.php?page=page_1
http://www.php_5/file_exists/index.php?page=page_2
http://www.php_5/file_exists/index.php?page=page_3

Sur mon site en ligne :
http://www.templiers.net/accusateurs/index.php?page=clement-V

Visiblement, si je change quelque chose, ma barre d'adresse n'affichera plus cette forme d'adresse.

Alors, je ne peux pas modifier mon code, donc je ne change rien…

Jack Bocar
jackbocar
le 02/01/2008 à 17:25
jackbocar
Sur mon serveur de test, je travail avec des VIRTUALHOST, je donne ce que je veux en nom de domaine.

Par exemple, les tests que je fais pour mon site principal sur le serveur de PLANET-WORK.COM : http://www.templers.net/

Sur mon serveur local de test, c'est : http://www.templiers-net/

Donc si je veux donner à un site de test ce nom de domaine : http://www.php-5/ pour tous les tests que je réalise en codage spécifique PHP5.
Rien ne si oppose.
Alors, effectivement, il n'y a pas de .net ou de .com bien sur, si je le veux, je peux le faire.
i M@N
le 02/01/2008 à 22:58
i M@N
Hello bounanée toussa ...

jacky : revoie ce qu'est passer une variable par $_POST ou $_GET et après tu reviens ( ici ) ... là c'est juste n'importe quoi ce code ... j'ai du mal à comprendre que tu nous parle de Virtualhosts alors que t'as pas saisi les bases de PHP.

smiley

@+...
One Love, One Heart, One Unity.
jackbocar
le 03/01/2008 à 09:03
jackbocar
Bonjour,

J'ai un script qui gère toutes les pages d'un même répertoire, ce script, autorise uniquement "je le pense" les seules pages qui sont inscrites dans le tableau "array". Il me donne aussi la possibilité d'avoir une page par défaut.

De plus, ce script à l'avantage de me donner une adresse url de la forme : http://www.templiers.net/accusateurs/index.php?page=clement-V

Exemple, dans mon tableau, j'ai une autorisation pour la page .PHP clement-V, si tu mets un autre nom après =, et qui n'est pas dans le tableau, s'affiche la page que vous cherchez n'existe pas.

Donc, je n'ai pas de problème avec ce script, la seule chose que je demandais, sans que mon système d'URL change, c'est savoir s'il est possible d'ajouter ; "file_exists" et comment le faire.

Alors, pour répondre à Keika, je lui ais dit que ce que renvoie un $_GET[] ou un $_POST[], après le ?, reçois la valeur qui est dans mon tableau. Je suis entièrement d'accord.

C'est bien ce qu'il se passe avec mon script, après le nom de domaine et le répertoire : www.templiers.net/accusateurs/, le nom de la page qui suit est celui qui est dans mon tableau. Ce nom est appelé avec mon menu, qui lui est écrit de cette façon :

<?php
echo '<a href="'.$_SERVER['PHP_SELF'].'?page=clement-V" class="menuNav">Pape Cl&eacute;ment V</a><br />';
?>


Et pour finir, mon serveur "localhost", tous mes tests sont faits avec des "Virtualhost", ce que je voulais dire c'est, pour tester les scripts.

Pour mon site qui est en ligne sur le serveur de "planet-work.com" et qui se nomme : www.templiers.net.

Mon répertoire "virtualohst" en local se nomme : www.templiers-net.

Pour tester mes nouveaux scripts en php5, le répertoire "virtualhost" se nomme : www.php_5. C'est vrai que je ne lui ai pas donné d'extension du genre .net ou .com. Mais, cela ne gène en rien le bon fonctionnement des scripts de tests.

Voila, c'est tout et j'espère avoir été clair dans mon explication.

Visiblement, après avoir passé une grande partie de mon après midi d'hier, à rechercher sur le net et avoir testé tout un tas de propositions ou de modèles, je n'ai rien trouvé de concluant pour ajouter ce fameux "file_exists" sans modifier mon script de tableau.

Si tu veux, tu peux aller sur le WALL :
http://www.lephpfacile.com/wall/wall-1381.php, là tu y verras la structure de mon site, tous les répertoires du site sont construits de la même manière. Peut-être que les explications ci-dessus, te paraitront plus claires en voyant la structure.

Jack Bocar
Keika
le 03/01/2008 à 11:53
Keika
olalala papi je t'arrete encore une fois. iM@n et moi avons raison tu ne sais pas ce que $_GET renvois.

Je ne dis pas que tes ulr sont fausses, loin de la ca a l'air de fonctionner, mais si tu veux recuperer quelque chose dans cette url la il faut que tu fasses un truc comme ca:

ton url = http://www.templiers.net/accusateurs/index.php?page=clement-V
<?php

//Pour recuperer clement-V
$page = $_GET['page'] ;

//Appeller la page
require('./page/'.$page.'.php') ;


//Ceci inclura dans ta page la page clement-V.php contenue dans le dossier "page"

?>


Alors compare ce que je viens de mettre avec ton gros pate plus haut, modifie et reviens, n'oublie pas de lire les cours avec le lien que iM@n t'as laisse.

Courage !
Le PHP --> C'est dur !
Répondre
LoadingChargement en cours