Php test si c'est un repertoire ou un fichier

marie -  
 xxx102 -
Bonjour,
Je souhaiterai connaitre le code php pour testersi l'élement d'une liste est un dossier ou un fichier
is-dir n'a pas l'aire de fonctionner.. voila mon code

<?php
$chemin="./test/";
if ($handle = opendir($chemin))
{
while (false !== ($file = readdir($handle)))
{
if(($file != '..') && ($file !='.') && ($file !='Thumbs.db'))
{
if(is_dir($file))
{ $file = '/'.$file; } // -> ca ne change rien alors que !is_dir($file) rajoute un /
// -> pour tous les éléments (fichiers ou dossiers)

}
}
closedir($handle);
}
?>


Commment dois je faire?
Merci pour toutes vos suggestions!
A voir également:

3 réponses

stpunky Messages postés 24 Statut Membre 5
 
Peut étre peut tu verifier pour chaques valeurs si le nom est de type *.* ou *.extension si tu connai le type des fichiers

Par exemple pour des images :

  $handle = opendir('.');

  while ( $file = readdir($handle) ){

	if(ereg(".jpg",$file)||ereg(".JPG",$file)||ereg(".bmp",$file)||ereg(".BMP",$file)){

   		 $files[] = $file;

	}

  }

  closedir($handle);



Ce qui règle aussi le problème du "if(($file != '..') && ($file !='.') && ($file !='Thumbs.db'))"
1
marie
 
Bonjour et merci de m'avoir répondu
Ton idée m'a l'air bonne, je vais commencé par faire ca.
Le problème c'est qu'il reste tous les fichiers dont je ne connais pas l'extension..

Du coup il me faudrait quand même une solution pour tester si c'est un dossier.
0
stpunky Messages postés 24 Statut Membre 5 > marie
 
En remplacant le :
if(ereg(".jpg",$file)||ereg(".JPG",$file)||ereg(".bmp",$fil­e)||ereg(".BMP",$file))

par :
if(preg_match('`^:alnum:`',$file)&&preg_match('`:alnum:$`',$file)&&strpos($file,'.')&& ($file !='Thumbs.db'))


Tu aura alors tous les nom de type *.* sachant que l'on ne met que trés rarement un "." dans le nom d'un dossier.

A vérifier pour les caractères spéciaux.
0
xxx102
 
Vous devriez mettre :

is_dir ($chemin.'/'.$file)

Il est clairement indiqué dans la documentation PHP que is_dir renvoie false si le chemin spécifié n'existe pas.
1
l_epais Messages postés 142 Statut Membre 31
 
Mauvais idée, les fichiers "." et ".." existe tjs (ce sont les répertoires racine et supérieurs ) tu as 2 fction pour ça :
glob() et scandir()

!!! si tu utilise count(scandir()), n'oublie pas que ton repertoire doit contenir plus que 2 fichiers car "." et ".." compte à chaque fois !!!

ref:
https://php.developpez.com/faq/?page=fichiers_lire#fichiers_dossier_vide
@plus
0