Votre exemple devrait fonctionner très bien (I désempare le précédent selon EDIT 2), à condition que le fichier se trouve dans le répertoire de travail courant (je vais simplement l'abréger en cwd à partir de maintenant).
EDIT
Désolé, ce que je pensais. Votre exemple ne fonctionne pas bien sûr, car
file_exists()
doit être fourni avec le chemin d'accès complet au fichier. Donc préfixez le fichier avec le répertoire dans lequel vous voulez sortir les fichiers du répertoire. Mon avertissement au sujet de la sanatizing et de la liste blanche, etc. compte quand même quand même.
FIN EDIT
EDIT 2
Wow, désolé, je suis chambouler bigtime. file_exists()
devrait fonctionner très bien avec les chemins relatifs. Looking at the documentation, il avertit cependant sur les restrictions de mode sans échec. Peut-être que cela s'applique à votre situation, je ne sais pas.
FIN EDIT 2
Vous pouvez tester ce qui est le CWD avec getcwd()
. Dans des circonstances normales, le cwd est le même que le point d'entrée de votre application. Donc, si par exemple /usr/www/your_site_root/index.php
est le point d'entrée, alors /usr/www/your_site_root/
est le cwd. Par conséquent, les fichiers que vous essayez d'inclure avec vos exemples doivent se trouver dans le répertoire en question. Un conseil:
Vous le savez peut-être déjà, mais votre exemple n'est pas très sécurisé. Vous ne désinfectez pas l'entrée de l'utilisateur de quelque façon que ce soit ($_GET[ 'file' ]
dans ce cas). De cette façon, le visiteur sera en mesure d'inclure toutes sortes de fichiers php avec des résultats indésirables. Par conséquent, je vous conseille de conserver une liste blanche des fichiers autorisés à être récupérés.Quelque chose comme:
<?php
$whiteList = array(
'dude',
'chick',
'mom'
);
// and just to be safe, you should probably strip stuff like ../ etc. here too.
$requestedFileBaseName = $_GET[ 'file' ];
if(!in_array($requestedFileBaseName, $whileList))
{
include('404.php');
}
else
{
include($requestedFileBaseName . '.php');
}
En supposant "file.php $" est disponible dans le include_path ou existe dans le même répertoire que le script en cours d'exécution, votre code devrait fonctionner. – Kevin