PHP file_exists和通配符
有没有办法编写PHP file_exists函数,以便它search一个任意扩展名的文件的目录。 例如,假设我知道一个文件被称为“hello”,但是我不知道扩展名,那么我将如何编写一个函数来search名为hello。*的文件并返回这个文件的名称? 据我所知,file_exists只会search一个string。
谢谢。
你正在寻找glob()
函数。
file_exists
不会进行任何types的search:它只允许在知道它的名字时知道是否存在。
而且,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
来search带有通配符的目录:
$it = iterator_to_array( new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );
会返回完整的path到数组中的某个/path中的所有.pdf文件。 上面的执行与glob()
相同,但迭代器提供了一个更强大和可扩展的API。
只要file_exists返回一个BOOLEAN,我写了这个小函数,它接受一个带*的searchstring来查找文件。例如:
searchForFile("temp*"); function searchForFile($fileToSearchFor){ $numberOfFiles = count(glob($fileToSearchFor)); if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);} }
如果您需要更多的控制权并且在PHP 5.3之前,您可以使用DirectoryIterator或RecursiveDirectoryIterator。 两者都有很多很好的function来增加控制和操作。
PHP文档位于DirectoryIterator和RecursiveDirectoryIterator