Мне нужно проверить, существует ли файл, но я не знаю расширения.
IE Я бы хотел:
if(file_exists('./uploads/filename')): // do something endif;
Конечно, это не будет работать, поскольку оно не имеет расширения. расширение будет либо jpg, jpeg, png, gif
Любые идеи о способе делать это, не делая петли?
Вам нужно будет сделать glob():
$result = glob ("./uploads/filename.*");
и посмотрите, есть ли в файле $result
что-либо.
У меня такая же потребность, и я пытался использовать glob, но эта функция, похоже, не переносима:
См. Примечания из http://php.net/manual/en/function.glob.php :
Примечание. Эта функция недоступна в некоторых системах (например, в старой Sun OS).
Примечание. Флаг GLOB_BRACE недоступен для некоторых не GNU-систем, таких как Solaris.
Он также более медленный, чем opendir, посмотрите: что быстрее: glob () или opendir ()
Поэтому я сделал функцию фрагмента, которая делает то же самое:
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; }
Применение :
$file = resolve('/var/www/my-website/index'); echo $file; // will output /var/www/my-website/index.html (for example)
Надеюсь, что это поможет кому-то, Иоан
Вы знали о функции типа файла PHP? http://php.net/manual/en/function.filetype.php
Или иначе is_file()
http://www.php.net/manual/en/function.is-file.php