Есть ли способ написать функцию PHP file_exists, чтобы она искала каталог для файла с произвольным расширением. Например, предположим, что я знал, что файл называется «привет», но я не знал расширения, как бы написать функцию, которая искала файл с именем hello. * И вернула имя этого файла? Насколько я могу судить, file_exists будет искать только строку.
Благодарю.
Вы ищете функцию 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)
Начиная с PHP5.3, вы также можете использовать GlobIterator
для поиска в каталоге с подстановочными знаками:
$it = iterator_to_array( new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );
вернет полные пути ко всем файлам .pdf в некотором / пути в массиве. Вышеописанное работает примерно так же, как glob()
, но итераторы предоставляют более мощный и расширяемый API.
Пока file_exists возвращает BOOLEAN, я написал эту небольшую функцию, которая принимает строку поиска с * для поиска файлов … Пример:
searchForFile("temp*"); function searchForFile($fileToSearchFor){ $numberOfFiles = count(glob($fileToSearchFor)); if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);} }
Если вам нужно немного больше контроля и на pre PHP 5.3 вы можете использовать DirectoryIterator или RecursiveDirectoryIterator. Оба имеют большую функцию для дополнительного управления и манипуляций.
Документы PHP находятся в каталоге DirectoryIterator и RecursiveDirectoryIterator