介绍
根据PHP Documentation,初始参数完全不同glob
。GlobIterator
目前尚不清楚为什么会这样,但已明确说明。
球体
array [glob][3] ( string $pattern [, int $flags = 0 ] )
^
|--- Expects pattern
全局迭代器
public [GlobIterator::__construct][5] ( string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO ] )
^
|--- Expects Path
解决方案
始终使用full path
. 多次看到此错误,但如果您使用完整路径,您可以确保它们都返回相同的文件列表
没有完整路径的示例
$path = "./test";
$glob1 = glob($path . '/*');
print_r($glob1);
$glob2 = new GlobIterator($path . '/*');
print_r(iterator_to_array($glob2));
输出
Array
(
[0] => ./test/fake.png
[1] => ./test/php-logo-virus.jpg
[2] => ./test/save
[3] => ./test/test.png
)
Array
(
)
完整路径示例
$path = __DIR__ ."/test";
$glob1 = glob($path . '/*');
print_r($glob1);
$glob2 = new GlobIterator($path . '/*');
print_r(iterator_to_array($glob2));
输出
Array
(
[0] => C:\lab\stackoverflow/test/fake.png
[1] => C:\lab\stackoverflow/test/php-logo-virus.jpg
[2] => C:\lab\stackoverflow/test/save
[3] => C:\lab\stackoverflow/test/test.png
)
Array
(
[C:\lab\stackoverflow/test\fake.png] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => C:\lab\stackoverflow/test\fake.png
[fileName:SplFileInfo:private] => fake.png
)
[C:\lab\stackoverflow/test\php-logo-virus.jpg] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => C:\lab\stackoverflow/test\php-logo-virus.jpg
[fileName:SplFileInfo:private] => php-logo-virus.jpg
)
[C:\lab\stackoverflow/test\save] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => C:\lab\stackoverflow/test\save
[fileName:SplFileInfo:private] => save
)
[C:\lab\stackoverflow/test\test.png] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => C:\lab\stackoverflow/test\test.png
[fileName:SplFileInfo:private] => test.png
)
)
输出不同的格式
正如您所看到$glob1 !== $glob2
的,不是因为文件不存在,而是因为glob
会返回一个array with string path
文件,而GlobIterator
会返回SplFileInfo
有其优势。
要从以下位置获取纯数组列表GlobIterator
:
print_r(array_values(array_map("strval",iterator_to_array($glob2))));
结论
是的,到目前为止,您的代码可以在任何平台上运行Unit Testing
并保持一致性。我不需要开始讲述GlobIterator
or的优点Iterator
,glob
但请放心,正确使用会返回相同的结果