Symfony-Finder не может открыть каталог - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь прочитать каталог и хочу получить последние файлы с текущей даты.

Когда я вставил URL в браузер, я получил результат всех файлов, которые находятся в ftp-каталоге.

Итак, у меня есть доказательство того, что параметр ftp-connection все еще работает.

enter image description here

Когда я пытаюсь запустить следующую функцию, я получаю сообщение об ошибке

RecursiveDirectoryIterator :: __ construct ( ftp: //...@example.com: 4242 ): не удалось открыть каталог: операция не удалась

Вот исключение из Symfony:

enter image description here

/**
 * @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 ]

0 голосов
/ 27 сентября 2018

Это больше не будет работать, если вы используете 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#L741

0 голосов
/ 12 сентября 2018

Как указано в документации, в $ iterator есть PHP iterator , поэтому вам нужно использовать iterator_count :

$anzahl =  iterator_count($iterator);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...