gpt4 book ai didi

php - PHP 和 Symfony Finder 的 FTP 性能

转载 作者:搜寻专家 更新时间:2023-10-31 20:35:10 25 4
gpt4 key购买 nike

我正在开发一个需要从远程 FTP 目录列出和下载一堆文件的应用程序。为此,我使用了 Symfony Finder 组件,它构建在 SPL 迭代器(如 RecursiveDirectoryIterator)之上。

我的问题是性能绝对糟糕。例如下面的代码:

<?php

$finder = new \Symfony\Component\Finder\Finder();
$finder->files()->in('ftp://user:password@example.org/')->name('*.tif');

foreach ($finder as $file) {
var_dump($file->getPathname());
}

在某些 FTP 服务上,这大约每 10-30 秒给我一个文件名!

我通过 XDebug Profiler 运行代码,大部分时间花在内部 PHP 函数上,例如 php::RecursiveDirectoryIterator->hasChildrenphp::FilterIterator->nextphp::SplFileInfo->isDir.

我还在启用 Wireshark 的情况下运行我的脚本,因为我怀疑 PHP 可能正在下载整个文件只是为了列出它们,但事实并非如此。

有谁知道为什么性能这么差?我该如何解决?

最佳答案

似乎 PHP 的 SplFileInfo 每次调用 isFile()isDir() 方法时都会重新连接到 FTP 服务器.这些方法被 Finder 使用,这就是导致性能不佳的原因。为每个文件打开多个 FTP session 以获取所有文件信息。

参见 https://github.com/symfony/symfony/issues/18923

关于php - PHP 和 Symfony Finder 的 FTP 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37546866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com