2009-04-14 11 views
24

Je sais, Je sais, cela sonne soo facile. Mais je n'arrive pas à trouver la bonne réponse sur Internet.Vérifiez si un répertoire existe en PHP

Une des solutions que j'ai trouvées consistait à utiliser is_dir.

if(is_dir($dir)) 
    echo 'directory exists'; 
else 
    echo 'drectory not exist'; 

Mais c'est mal - Toute cette fonction fait est de vérifier si le $dir est un répertoire, il ne vérifie pas si le répertoire existe, ou non. En d'autres termes, si je mets:

$rootDir = "C:\\Documents and Settings\\test\\My Documents\\Image Directory\\Me Dog\\"; 

alors la fonction retourne vrai, même si vous trouvez pas un tel répertoire sur votre serveur web.

Des idées?

+0

Ce fut un bug rapporté en php 5.2, bien que je ne trouve plus le lien vers le rapport de bogue. –

Répondre

53

Devrait fonctionner correctement. De la documentation is_dir():

Retourne TRUE si le nom du fichier existe et est un répertoire, FAUX autrement.

Eh bien, de toute façon si elle ne cherche pas:

if(file_exists($dir) && is_dir($dir)) 

BTW. les résultats de ces fonctions sont mis en cache dans le cache de statistiques. Utilisez clearstatcache() pour nettoyer ce cache.

+5

+1 pour l'information clearstatcache, toujours utile de savoir –

2

Vous voudrez probablement utiliser opendir() après is_dir() accepte que le chemin (pourrait) être un répertoire.

Si la ressource retournée par opendir() est valide, vous savez que vous avez un répertoire et que vous avez déjà un handle pour le lire. N'oubliez pas d'appeler closedir(), de toute façon, si un handle valide est renvoyé.

Edit:

Cette réponse suppose que vous allez ouvrir le répertoire ou l'autre manière. Si vous avez juste besoin de vous assurer qu'un chemin est sain/valide, file_exists() est beaucoup moins cher.

0

Vous pouvez essayer ceci:

if(is_dir($dir) && is_writeable($dir)) 
{ 
    // ... 
} 
+6

pas une solution au problème, car les répertoires non-inscriptibles sont aussi des répertoires. – stefs

Questions connexes