PHP file_exists和通配符

bsa*_*mek 52 php wildcard

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

谢谢.

Pas*_*TIN 92

你正在寻找这个glob()功能.

file_exists 不进行任何类型的搜索:它只允许人们在知道其名称时知道是否存在文件.

而且,如果PHP> = 5.3,您可以使用新的GlobIterator.


作为示例glob(),以下代码部分:

$list = glob('temp*.php');
var_dump($list);
Run Code Online (Sandbox Code Playgroud)

给我这个输出:

array
  0 => string 'temp-2.php' (length=10)
  1 => string 'temp.php' (length=8)
Run Code Online (Sandbox Code Playgroud)


这一个:

$list = glob('te*-*');
var_dump($list);
Run Code Online (Sandbox Code Playgroud)

是的,有两个*;-)

会给我:

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)
Run Code Online (Sandbox Code Playgroud)


Gor*_*don 7

从PHP5.3开始,您还可以使用GlobIterator通过通配符搜索目录:

$it = iterator_to_array(
    new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );
Run Code Online (Sandbox Code Playgroud)

将返回数组中某些/ path中所有.pdf文件的完整路径.上面的执行大致相同glob(),但迭代器提供了更强大和可扩展的API.


小智 5

只要file_exists返回布尔值,我就编写了这个小函数,该函数接受带*的搜索字符串以查找文件...示例:

    searchForFile("temp*");

    function searchForFile($fileToSearchFor){
        $numberOfFiles = count(glob($fileToSearchFor));
        if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}
    }
Run Code Online (Sandbox Code Playgroud)