我尝试读取目录并想要获取当前日期的最后一个文件。
当我将URL放入浏览器时,我得到了所有文件的结果,这些文件位于ftp目录中。
所以我有证据表明ftp-connectionparameter仍然有效。
当我尝试启动以下功能时,我会收到错误消息
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
]);
}
然后我打开带有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/');
答案 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