[英]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.