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

Другие вопросы по тегам