提问者:小点点

PHP:从ftp服务器获取文件


我有一个网站,它从远程ftp服务器(linux proftpd)加载配置文件(每1个网页5-15个)。

当用户只打开(刷新)一个网页时,一切正常,网页呈现速度很快(约100毫秒)。当用户在web浏览器上一个接一个地打开4-6个选项卡(打开选项卡之间的延迟约1秒)时,平均1-3个网页渲染速度很快,但4-6个页面的渲染速度太慢(最多60秒或更长)。

我发现了瓶颈:这是ftp_get()php函数,当从ftp获取文件时,它会冻结到ftp_connect()中设置的超时时间。仅ftp_get()冻结网页呈现。

public function getConfigViaFtp($config_name)
{
    $handle = fopen('php://temp', 'r+');
    ftp_fget($this->getFtpConnectionStream(), $handle, $config_name, FTP_ASCII);
    rewind($handle);

    return stream_get_contents($handle);
}

我使用ssh连接到远程ftp服务器,并在页面冻结时运行ftptop查看连接。proftpd只有一个与命令“RETR”的连接。

ftp_get始终成功地从ftp获取第一个(有时最多5个文件)文件,但另一个文件始终为空(但在ftp服务器上存在且不为空),并且ftp_获取此文件的超时。

我尝试:

ob_start(); 
$result = ftp_get($this->getFtpConnectionStream(), 'php://output', $config_name, FTP_ASCII);
$data = ob_get_contents();
ob_end_clean();

尝试ftp\u pasv()

但是什么也没有:(ftp_get()和网页仍然冻结了很多时间,并且不会在每个网页的末尾加载文件内容。

怎么了?proftpd设置(默认)还是其他?


共1个答案

匿名用户

已解决:ftp_-pasv()在ftp_-login()之后,但不是在ftp_-connect之后,并且一切正常:)