2010-12-12 89 views
0

J'ai ce code:dossier de numérisation pour les fichiers au lieu de la matrice

<?php 
$allowed = array('file1', 'file2', 'file3'); 

if (in_array($_GET["url"], $allowed)) { 
    // You can include 
} else { 
    // Error message and dont include 
} 
?> 

Mais au lieu d'écrire tous les noms de fichiers dans le tableau, comment puis-je faire pour que les fichiers par exemple mon dossier FILES/est acceptée aucun autre fichier. Comment faire ça?

+0

@ajreal, ce n'est pas tout à fait vrai; ce que Moussa fait c'est la seule façon de le faire en sécurisant les fichiers qui peuvent être inclus. Cela dit, c'est toujours horrible. –

+0

ops, poster à tort, je fais référence au reste de la réponse – ajreal

Répondre

3

Utilisez la fonction file_exists comme ceci:

if (file_exists('FILES/'.basename($_GET["url"]))) { 
    // You can include 
} else { 
    // Error message and dont include 
} 
+2

Attention avec les chemins relatifs dans '$ _GET ['url']'! –

+0

à partir des documents file_exists, "Vérifie si un fichier ou un répertoire existe". Ainsi, cela permettra à l'application d'essayer d'inclure des répertoires, ce qui entraînera des erreurs. J'ai également résolu le problème du chemin relatif dans ma réponse ci-dessous. –

+1

@Felix bon point, et aussi très facile à réparer. –

0

Fonction pour récupérer des fichiers dans un dossier:

<? 
function fGetFilesInFolder($sFolder) { 

    $aFiles = array(); 
    if(file_exists($sFolder)) { 
     if ($handle = opendir($sFolder)) { 
      while (false !== ($sFile = readdir($handle))) { 
       if ($sFile != "." && $sFile != "..") $aFiles[] = $sFile; 
      } 
      closedir($handle); 
     } 
    } 
    return $aFiles; 
} 
?> 
+1

il y a 'glob()' existe déjà depuis longtemps. –

+0

merci pour l'indice. – Ilyssis