リモートFTPディレクトリから多数のファイルをリストしてダウンロードする必要があるアプリケーションを開発しています。このため、私はRecursiveDirectoryIteratorのようなSPLイテレータの上に構築されたSymfony Finderコンポーネントを使用しています。PHPとSymfony FinderでのFTPパフォーマンス
私の問題は、パフォーマンスが絶対に悪いことです。たとえば、次のコード:
<?php
$finder = new \Symfony\Component\Finder\Finder();
$finder->files()->in('ftp://user:[email protected]/')->name('*.tif');
foreach ($finder as $file) {
var_dump($file->getPathname());
}
一部のFTPサービスでは、これは10-30秒ごとに約1つのファイル名を与えます。
私はXDebug Profilerでコードを実行しました。ほとんどの時間はphp::RecursiveDirectoryIterator->hasChildren
,php::FilterIterator->next
、php::SplFileInfo->isDir
などの内部PHP関数で費やしています。
Wiresharkを有効にしてスクリプトを実行したのは、PHPがファイル全体をダウンロードしているだけかもしれないと思っていたからですが、そうではありません。
パフォーマンスが悪い理由を知っている人はいますか?それをどうやって修正することができますか?