2010-07-28 4 views
3

Utilisation de PHP 5.3.3 (stable) sous Linux CentOS 5.5.PHP: Utilisation de scandir(), les dossiers sont traités comme des fichiers

Voilà ma structure de dossier:

www/myFolder/ 
www/myFolder/testFolder/ 
www/myFolder/testFile.txt 

En utilisant scandir() contre le dossier "myFolder" Je reçois les résultats suivants:

. 
.. 
testFolder 
testFile.txt 

J'essaie de filtrer les dossiers de la résultats et seuls les fichiers de retour:

$scan = scandir('myFolder'); 

foreach($scan as $file) 
{ 
    if (!is_dir($file)) 
    { 
     echo $file.'\n'; 
    } 
} 

Les résultats attendus sont:

testFile.txt 

Cependant, je vois effectivement:

testFile.txt 
testFolder 

Quelqu'un peut-il me dire ce qui ne va pas ici s'il vous plaît?

Répondre

9

Vous devez changer de répertoire ou l'ajouter à votre test. is_dir renvoie la valeur false lorsque le fichier n'existe pas.

$scan = scandir('myFolder'); 

foreach($scan as $file) 
{ 
    if (!is_dir("myFolder/$file")) 
    { 
     echo $file.'\n'; 
    } 
} 

Cela devrait faire la bonne chose

+0

Je vois où je me suis trompé maintenant! Merci beaucoup! – Reado

+1

Ou vous pouvez aussi utiliser la fonction is_file() pour suivre une logique positive. Ex: if (is_file ("myFolder /".$ fichier)) {// fais-moi} – Alex

2

Est-ce que is_dir() ne prend pas un fichier en paramètre?

$scan = scandir('myFolder'); 

foreach($scan as $file) 
{ 
    if (!is_dir($file)) 
    { 
     echo $file.'\n'; 
    } 
} 
+0

+1 Battus au poinçon –

+0

le paramètre de 'is_dir' est un * par rapport * nom de fichier donc ce n'est pas cor! rect, vous devez également passer myFolder (par ex. 'is_dir (fichier 'myFolder /'.$)') comme dans Cfreak's [réponse] (http://stackoverflow.com/questions/3353853/php-using-scandir-folders-are-treated-as-files/3353903# 3353903). – Sk8erPeter

1

Si vous affichiez des erreurs, vous verriez pourquoi cela ne fonctionne pas:

Warning: Wrong parameter count for is_dir() in testFile.php on line 16 

Maintenant, essayez de passer fichier $ à is_dir()

$scan = scandir('myFolder'); 

foreach($scan as $file) 
{ 
    if (!is_dir($file)) 
    { 
     echo $file.'\n'; 
    } 
} 
2

vous ai déjà dit la réponse ici: http://bugs.php.net/bug.php?id=52471

+0

Vous l'avez fait, mais je pensais que votre réponse était un peu vague sans un exemple pour le sauvegarder. Néanmoins, je peux voir où je me suis trompé maintenant (merci aux exemples ci-dessus) et comprendre ce que vous voulez dire. – Reado

+0

@reado: Pas de soucis. Tout le monde fait des erreurs parfois :) –

+0

Merci Daniel, désolé pour tous les rapports de bogue aujourd'hui. :( – Reado

0

Si quelqu'un qui vient ici est intéressé à sauver la sortie d'un tableau, voici un moyen rapide de faire que (modifié pour être plus efficace:

$dirPath = 'dashboard'; 

$dir = scandir($dirPath); 

foreach($dir as $index => &$item) 
{ 
    if(is_dir($dirPath. '/' . $item)) 
    { 
     unset($dir[$index]); 
    } 
} 

$dir = array_values($dir);