Symfony-Finder无法打开目录

时间:2018-09-12 08:21:18

标签: php symfony symfony-finder

我尝试读取目录并想要获取当前日期的最后一个文件。

当我将URL放入浏览器时,我得到了所有文件的结果,这些文件位于ftp目录中。

所以我有证据表明ftp-connectionparameter仍然有效。

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
    ]);
}

然后我打开带有file_gets_content($ url。“ filename.txt”)的文件的URL,然后我得到的内容没有错误。

似乎只是我不使用Symfony的Finder不正确。

我当前的Symfony是4.1.4,我已经清除了缓存,还手动删除了缓存文件。

感谢每位小费

以下是symfony-finder-component的链接: 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 :(得分:0)

如文档所述,您在$ iterator中拥有的是PHP iterator, 因此您需要使用iterator_count

$anzahl =  iterator_count($iterator);

答案 1 :(得分:0)

如果您使用的是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