球形模式不匹配任何内容

根据PHP documentation,模式...递归地匹配所有子目录,但是当我尝试使用它时,没有文件匹配。

根据文档,glob自PHP 5.1以来没有变化,但是如果有关系,我正在使用PHP 7.2.24。

目录结构:

.
├── bar
│   └── bar_file
└── foo
    ├── 1
    │   └── foo_1_file
    └── foo_file

PHP:

var_dump(glob('./.../*')); // prints array(0) {}
var_dump(glob('./.../foo_file')); // prints array(0) {}

我知道有一个workaround可以解决此问题,但是我想知道是否有PHP本机解决方案,或者没有,为什么PHP参考文档有缺陷。

benmoke 回答:球形模式不匹配任何内容

文档不完整,甚至不正确。截至2019年11月,尚无代码明确支持PHP中的递归glob语法,并且底层操作系统库也不太可能支持它。

  1. IEEE 1003.1中没有递归glob语法

  2. PHP UNIX implementation从标准C库委托给GLOB(3)。在Linux上,最有可能是glibc,它不支持递归syntax

  3. PHP Windows implementation不支持目录递归

  4. PHP test suite中的所有glob测试都不包含涵盖三点(...)语法的测试。

  5. 根据the change的提交消息,该消息将glob模式语法引入到PHP文档中,特殊字符列表基于djgpp libc库支持的字符。 djgpp manpage指出,三点语法是对旧VMS功能的致敬。

      

    ...以递归方式匹配所有子目录(VMS爱好者,很高兴!)。

所有这些都是有力的证据,表明文档中列出的递归语法只有在PHP支持的平台上运行(例如,PHP)才能运行。在DOS或旧Windows上使用DJGPP。

本文链接:https://www.f2er.com/3104068.html

大家都在问