繁体   English   中英

PHP file_exists 和通配符

[英]PHP file_exists and wildcard

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

谢谢。

您正在寻找glob()函数。

file_exists不进行任何类型的搜索:当知道文件名称时,它只允许知道文件是否存在。

而且,对于 PHP >= 5.3,您可以使用新的GlobIterator


以“glob()”为例,以下部分代码:
array
  0 => string 'temp-2.php' (length=10)
  1 => string 'temp.php' (length=8)

给我这个输出:

$list = glob('te*-*');
var_dump($list);

而这个:
 $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来搜索带有通配符的目录:

$it = iterator_to_array(
    new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );

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

只要 file_exists 返回一个 BOOLEAN 我写了这个小函数,它接受一个带有 * 的搜索字符串来查找文件......例如:

    searchForFile("temp*");

    function searchForFile($fileToSearchFor){
        $numberOfFiles = count(glob($fileToSearchFor));
        if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}
    }

如果您需要更多控制并且使用 PHP 5.3 之前的版本,您可以使用 DirectoryIterator 或 RecursiveDirectoryIterator。 两者都具有许多用于增加控制和操作的强大功能。

PHP 文档位于DirectoryIteratorRecursiveDirectoryIterator

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM