Подтвердить что ты не робот

PHP file_exists и подстановочный знак

Есть ли способ написать функцию PHP file_exists, чтобы он искал каталог для файла с произвольным расширением. Например, предположим, что я знал, что файл называется "привет", но я не знал расширения, как бы написать функцию, которая искала файл с именем hello. * И вернула имя этого файла? Насколько я могу судить, file_exists будет искать только строку.

Спасибо.

4b9b3361

Ответ 1

Вы ищете функцию glob().

file_exists не выполняет никакого поиска: он позволяет только знать, существует ли флек или нет, когда вы знаете его имя.

И с PHP >= 5.3 вы можете использовать новый GlobIterator.


В качестве примера с glob() приведена следующая часть кода:

$list = glob('temp*.php');
var_dump($list);

Дает мне этот результат:

array
  0 => string 'temp-2.php' (length=10)
  1 => string 'temp.php' (length=8)


Хотя этот:

$list = glob('te*-*');
var_dump($list);

Да, с двумя *; -)

Дай мне:

array
  0 => string 'temp-2.php' (length=10)
  1 => string 'test-1.php' (length=10)
  2 => string 'test-curl.php' (length=13)
  3 => string 'test-phing-1' (length=12)
  4 => string 'test-phpdoc' (length=11)

Ответ 2

Начиная с PHP5.3, вы также можете использовать GlobIterator для поиска в каталоге с подстановочными знаками:

$it = iterator_to_array(
    new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );

будет возвращать полные пути ко всем файлам .pdf в некотором/пути в массиве. Вышеописанное выполняется примерно так же, как glob(), но итераторы предоставляют более мощный и расширяемый API.

Ответ 3

Пока file_exists возвращает BOOLEAN, я написал эту небольшую функцию который принимает строку поиска с * для поиска файлов... Пример:

    searchForFile("temp*");

    function searchForFile($fileToSearchFor){
        $numberOfFiles = count(glob($fileToSearchFor));
        if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}
    }

Ответ 4

Если вам нужно немного больше контроля и на pre PHP 5.3 вы можете использовать DirectoryIterator или RecursiveDirectoryIterator. Оба имеют большую функцию для дополнительного управления и манипулирования.

Документы PHP находятся на DirectoryIterator и RecursiveDirectoryIterator