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