繁体   English   中英

支持目录的PHP glob()

[英]PHP glob() in bracketed directories

在Windows计算机上,以下脚本:

<?php

mkdir("c:\\[test]");
file_put_contents("c:\\[test]\\test.txt", "some content");
chdir("c:\\[test]");
echo getcwd()."\n";
var_dump(glob('*'));

?>

显示这个:

C:\[test]
array(0) {
}

如果这是预期的:

C:\[test]
array(1) {
    [0]=>
    string(8) "test.txt"
}

据我所知, 当在pattern参数中找到时glob将括号视为特殊字符

模式*匹配当前工作目录中的任何文件。 但是,glob()表现得好像是使用模式c:\\\\[test]\\\\*

然后括号被解释为模式的一部分,而实际上它们是目录的一部分。

glob应该将路径视为模式的一部分吗? 我宁愿认为它应该使用当前目录作为起点,然后处理模式

(尝试总结): glob函数的作用类似于将c:\\\\[test]\\\\*作为匹配模式,并尝试匹配c:\\t\\*c:\\e\\*c:\\s\\* 但模式实际上是* ,它不应该试图匹配其中任何一个。

这似乎是在php.net上的这个错误报告中的一个问题: https ://bugs.php.net/bug.php id = 33047

该主题的最后一篇文章是关于它不是一个错误,但是作为正则表达式的一部分,glob如何处理括号的问题。 我不确定我是否同意。 看起来你可以解决这个问题,除非你不能进入父文件夹。

如果删除了位于[test]文件夹内的第一个要求,则可以使用如下语法获取文件列表:

chdir('..');
$glob = glob("[[]test[]]/*");

鉴于这些复杂性,如果您在Windows机器上遇到问题,我建议不要使用glob函数,并查看其他文件列表函数,如readdir

暂无
暂无

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

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