PHP:从ftp服务器获取文件(proftpd)

时间:2014-02-06 11:46:13

标签: php ftp

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

当用户打开(刷新)只有一个网页时 - 一切都很好,页面渲染速度很快(~100毫秒)。当用户在网络浏览器上逐个打开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与COMMAND'RETR'只有一个连接。

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

我试着:

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

尝试ftp_pasv()

但没有:( ftp_get()和网页仍然会冻结大量时间,并且不会在每个网页的末尾加载文件内容。

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

1 个答案:

答案 0 :(得分:0)

在ftp_login()之后

已解决: ftp_pasv(),但不是在ftp_connect之后,一切正常:)