Symfony finder 中文件元素的默认顺序是什么?
What is the default order of file elements in Symfony finder?
以下代码 returns 在两种环境中产生不同的结果(但是应该尽可能接近彼此:相同的 PHP 版本等)
/var/www/html/project/vendor/package/path/to/some/folder
目录在两个环境中包含完全相同的一组文件。文件本身由 composer
.
放在那里
use Symfony\Component\Finder\Finder;
// Don't mind this. The real app uses an autoloading mechanism.
require __DIR__ . '/../vendor/symfony/finder/Finder.php';
require __DIR__ . '/../vendor/symfony/finder/SplFileInfo.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/FilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/PathFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/FilenameFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/FileTypeFilterIterator.php';
$path = '/var/www/html/project/vendor/package/path/to/some/folder';
$path = Finder::create()->files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path);
$iterator = $path->getIterator();
$iterator->rewind();
$current = $iterator->current();
echo $current->getRelativePathname();
这不是随机的。结果在单一环境中是一致的。但是在任一环境中都会显示不同的路径名。我能够追溯到 PHP 的原话:FilterIterator::rewind
,但我不确定倒带是否是这里的问题。
Finder 组件没有定义的“默认”顺序。
Finder 的迭代器 (Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator
) 在核心 \RecursiveDirectoryIterator
上扩展,它没有定义默认顺序(也没有“设置”顺序的方法)。因此不能保证定义或保证顺序。它高度依赖于系统和文件系统,不应依赖它。
如果您需要可靠、一致的排序顺序,只需在 Finder 实例上使用适当的 sort*()
方法。这将导致在您调用 getIterator()
时将结果包装在 SortableIterator 上,并以可预测的方式对结果进行排序。
以下代码 returns 在两种环境中产生不同的结果(但是应该尽可能接近彼此:相同的 PHP 版本等)
/var/www/html/project/vendor/package/path/to/some/folder
目录在两个环境中包含完全相同的一组文件。文件本身由 composer
.
use Symfony\Component\Finder\Finder;
// Don't mind this. The real app uses an autoloading mechanism.
require __DIR__ . '/../vendor/symfony/finder/Finder.php';
require __DIR__ . '/../vendor/symfony/finder/SplFileInfo.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/FilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/PathFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/FilenameFilterIterator.php';
require __DIR__ . '/../vendor/symfony/finder/Iterator/FileTypeFilterIterator.php';
$path = '/var/www/html/project/vendor/package/path/to/some/folder';
$path = Finder::create()->files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path);
$iterator = $path->getIterator();
$iterator->rewind();
$current = $iterator->current();
echo $current->getRelativePathname();
这不是随机的。结果在单一环境中是一致的。但是在任一环境中都会显示不同的路径名。我能够追溯到 PHP 的原话:FilterIterator::rewind
,但我不确定倒带是否是这里的问题。
Finder 组件没有定义的“默认”顺序。
Finder 的迭代器 (Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator
) 在核心 \RecursiveDirectoryIterator
上扩展,它没有定义默认顺序(也没有“设置”顺序的方法)。因此不能保证定义或保证顺序。它高度依赖于系统和文件系统,不应依赖它。
如果您需要可靠、一致的排序顺序,只需在 Finder 实例上使用适当的 sort*()
方法。这将导致在您调用 getIterator()
时将结果包装在 SortableIterator 上,并以可预测的方式对结果进行排序。