2010-07-21 12 views
24

Ich muss überprüfen, ob eine Datei existiert, aber ich kenne die Erweiterung nicht.PHP-Check-Datei existiert ohne zu wissen, die Erweiterung

IE würde ich tun:

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

Natürlich, die Arbeit gewohnt, da es keine Erweiterung hat. die Erweiterung wird entweder jpg, jpeg, png, gif

Irgendwelche Ideen einer Art und Weise, dies zu tun, ohne eine Schleife zu tun?

Antwort

48

Sie würden eine glob():

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

tun und sehen, ob $result alles enthält.

+11

'glob' kann auch mit einer bash artigen Klammer Expansion verwendet werden. – Gumbo

+0

@pekka: Vielen Dank. –

-1

Haben Sie über die PHP-Datei des Typs Funktion wissen? http://php.net/manual/en/function.filetype.php

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

+0

Das scheint nicht die Frage überhaupt zu beantworten –

+0

Aber er kann den Dateityp nicht erhalten, ohne den vollständigen Dateinamen zu kennen, was sein genaues Problem ist. Er weiß, dass die Datei "Dateiname. ???" heißt, und muss wissen, wie man das "???" ohne Schleife über eine Reihe von Erweiterungen, die jede von ihnen prüfen –

+0

Sie haben Recht ... Ich missverstanden Dateityp. Aber er könnte es mit is_file() tun. Meinst du nicht? – gearsdigital

3

Ich habe das gleiche Bedürfnis bekam und versuchte glob zu verwenden, aber diese Funktion scheint nicht tragbar zu sein:

Siehe Hinweise auf von http://php.net/manual/en/function.glob.php:

Hinweis: Diese Funktion ist auf einigen Systemen nicht verfügbar (z. B. altes Sun OS).

Hinweis: Die GLOB_BRACE Flag ist bei einigen nicht GNU-Systemen verfügbar, wie Solaris.

Es ist auch langsamer als opendir, werfen Sie einen Blick auf: Which is faster: glob() or opendir()

Also habe ich einen Schnipsel Funktion gemacht, die das gleiche tut:

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; 
} 

Verbrauch:

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

Hoffnung, das könnte jemand hilft, Ioan

`Glob ("./ uploads/filename {jpg, jpeg, png, gif}.", GLOB_BRACE)`:
Verwandte Themen