【问题标题】:PHP file_exists and wildcardPHP file_exists 和通配符
【发布时间】:2011-02-14 08:07:44
【问题描述】:

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

谢谢。

【问题讨论】:

标签: php wildcard


【解决方案1】:

您正在寻找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)

【讨论】:

  • 我知道一定有更好的功能。谢谢!
  • 另请注意,您不限于*;单个字符 (?) 和类 ([abc]) 等等也可以很好地用于 glob 模式。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    PHP 文档位于 DirectoryIteratorRecursiveDirectoryIterator

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 像魅力一样工作。旁注:您可能需要将 $_SERVER['DOCUMENT_ROOT'] 部分添加到文件名的前面。
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-12-20
        • 2014-01-19
        • 2016-04-29
        • 2016-01-23
        • 2011-10-04
        • 2011-02-10
        • 2011-04-04
        • 2013-08-21
        • 2010-10-22
        相关资源
        最近更新 更多