Symfony-Finder не может открыть каталог
Я пытаюсь прочитать каталог и хочу получить последние файлы с текущей даты.
Когда я помещаю URL в браузер, я получаю результат всех файлов, которые находятся в ftp-каталоге.
Итак, у меня есть доказательство того, что параметр ftp-connection все еще работает.
Когда я пытаюсь запустить следующую функцию, я получаю сообщение об ошибке
RecursiveDirectoryIterator:: __ construct ( ftp://...@example.com:4242): не удалось открыть каталог: операция не выполнена
Вот исключение из Symfony:
/**
* @Route("/download", name="getfile")
*/
public function getFileWithFtp()
{
$host = "example.com";
$username = "username";
$userpass = "userpass";
$port = 4242;
$url = 'ftp://' . $username . ':' . $userpass . '@' . $host . ':' . $port .'/';
$datum = date('Y-m-d');
$finder = new Finder();
$iterator = $finder
->files()
->in($url)
->name('*BEHWN.TXT')
->date($datum);
$anzahl = count($iterator);
return $this->render('ftp/index.html.twig', [
'controller_name' => 'FtpController',
'url' => $url,
'anzahl' => $anzahl
]);
}
Когда я открываю URL с файлом с file_gets_content ($ url. "Filename.txt"), то я получаю содержимое без ошибок.
Только кажется, что я не использую Finder от Symfony не правильно.
Мой текущий Symfony - 4.1.4, и я очистил кэши, а также вручную удалил файлы кэша.
Спасибо за каждый отзыв
Вот ссылка на компонент symfony-finder: https://symfony.com/doc/current/components/finder.html
Поскольку Finder использует итераторы PHP, вы можете передать любой URL с поддерживаемым протоколом:
Вот часть кода FTP из документации:
// always add a trailing slash when looking for in the FTP root dir
$finder->in('ftp://example.com/');
// you can also look for in a FTP directory
$finder->in('ftp://example.com/pub/');
2 ответа
Как указано в документации, в $iterator есть PHP- итератор, поэтому вам нужно использовать iterator_count:
$anzahl = iterator_count($iterator);
Это больше не будет работать, если вы используете Symfony v3.4.7 и выше.
Существует проблема: https://github.com/symfony/symfony/issues/27423
Я сделал исправление, но это займет некоторое время, пока это не объединится, я думаю https://github.com/symfony/symfony/pull/28604
Резюме:
"В Finder[...] был выпущен, который должен удалить дублирующие косые черты из имен путей. Однако это приводит к ошибке при использовании для поиска файлов в корневом каталоге FTP".
"В результате рабочий код до v3.4.7 приводит к нарушению кода после v3.4.7"
Этот метод все испортил, включая мое исправление https://github.com/symfony/symfony/blob/0670c48477b3d88787b6fe0dec168c5c8ae49c66/src/Symfony/Component/Finder/Finder.php