PHP file_exists和通配符

时间:2010-04-30 17:15:00

标签: php wildcard

是否有办法编写PHP file_exists函数,以便在目录中搜索具有任意扩展名的文件。例如,假设我知道文件被称为“hello”,但我不知道扩展名,我如何编写一个搜索名为hello。*的文件的函数并返回该文件的名称?据我所知,file_exists只会搜索一个字符串。

感谢。

5 个答案:

答案 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。两者都有很多很好的功能,可以增加控制和操作。

PHP文档位于DirectoryIteratorRecursiveDirectoryIterator

答案 4 :(得分:0)

您可以使用 fnmatch 将一个文件名与模式匹配。在所有文件的循环中使用它。

if (fnmatch("hello*", $filename)) {
  echo 'true';
}