2010-07-21 18 views
24

Je dois vérifier si un fichier existe mais je ne connais pas l'extension.Le fichier de contrôle PHP existe sans connaître l'extension

IE Je voudrais faire:

if(file_exists('./uploads/filename')): 
// do something 
endif; 

Bien sûr que wont travail comme il n'a pas d'extension. l'extension sera soit jpg, jpeg, png, gif

Des idées d'une façon de faire cela sans faire de boucle?

Répondre

48

Vous auriez à faire une glob():

$result = glob ("./uploads/filename.*"); 

et voir si $result contient quoi que ce soit.

+11

'glob' peut également être utilisé avec une extension de type accolade de type bash:' glob ("./ uploads/filename. {Jpg, jpeg, png, gif}", GLOB_BRACE) '. – Gumbo

+0

@pekka: Merci beaucoup. –

-1

Connaissiez-vous la fonction de type de fichier PHP? http://php.net/manual/en/function.filetype.php

Ou autrement is_file() http://www.php.net/manual/en/function.is-file.php

+0

Cela ne semble pas du tout répondre à la question –

+0

Mais il ne peut pas obtenir le type de fichier sans connaître le nom de fichier complet, qui est son problème exact. Il sait que le fichier s'appelle 'nom de fichier. ???' et doit savoir comment le '???' sans boucler sur un tas d'extensions vérifiant chacun d'entre eux –

+0

Vous avez raison ... j'ai mal compris type de fichier. Mais il pourrait le faire avec is_file(). Tu ne le crois pas? – gearsdigital

3

J'ai le même besoin, et essayé d'utiliser glob mais cette fonction semble ne pas être portable:

Voir les notes de http://php.net/manual/en/function.glob.php:

Remarque: Cette fonction n'est pas disponible sur certains systèmes (par ex. Sun OS).

Remarque: L'indicateur GLOB_BRACE n'est pas disponible sur certains systèmes non GNU, tels que Solaris.

Il a également plus lent que opendir, jetez un oeil à: Which is faster: glob() or opendir()

J'ai donc fait une fonction d'extrait qui fait la même chose:

function resolve($name) { 
    // reads informations over the path 
    $info = pathinfo($name); 
    if (!empty($info['extension'])) { 
     // if the file already contains an extension returns it 
     return $name; 
    } 
    $filename = $info['filename']; 
    $len = strlen($filename); 
    // open the folder 
    $dh = opendir($info['dirname']); 
    if (!$dh) { 
     return false; 
    } 
    // scan each file in the folder 
    while (($file = readdir($dh)) !== false) { 
     if (strncmp($file, $filename, $len) === 0) { 
      if (strlen($name) > $len) { 
       // if name contains a directory part 
       $name = substr($name, 0, strlen($name) - $len) . $file; 
      } else { 
       // if the name is at the path root 
       $name = $file; 
      } 
      closedir($dh); 
      return $name; 
     } 
    } 
    // file not found 
    closedir($dh); 
    return false; 
} 

Utilisation:

$file = resolve('/var/www/my-website/index'); 
echo $file; // will output /var/www/my-website/index.html (for example) 

Espoir qui pourrait aider quelqu'un, Ioan