是否有办法编写PHP file_exists函数,以便在目录中搜索具有任意扩展名的文件。例如,假设我知道文件被称为“hello”,但我不知道扩展名,我如何编写一个搜索名为hello。*的文件的函数并返回该文件的名称?据我所知,file_exists只会搜索一个字符串。
感谢。
答案 0 :(得分:87)
您正在寻找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)
答案 1 :(得分:6)
从PHP5.3开始,您还可以使用GlobIterator
搜索带通配符的目录:
$it = iterator_to_array(
new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );
将返回数组中某些/ path中所有.pdf文件的完整路径。上面的代码与glob()
大致相同,但迭代器提供了更强大和可扩展的API。
答案 2 :(得分:4)
只要file_exists返回一个BOOLEAN,我就写了这个小函数 接受带*的搜索字符串来查找文件... 例如:
searchForFile("temp*");
function searchForFile($fileToSearchFor){
$numberOfFiles = count(glob($fileToSearchFor));
if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}
}
答案 3 :(得分:1)
如果您需要更多控制并且在PHP 5.3之前,您可以使用DirectoryIterator或RecursiveDirectoryIterator。两者都有很多很好的功能,可以增加控制和操作。
答案 4 :(得分:0)
您可以使用 fnmatch
将一个文件名与模式匹配。在所有文件的循环中使用它。
if (fnmatch("hello*", $filename)) {
echo 'true';
}