【问题标题】:PHP: Getting files from ftp server (proftpd)PHP:从 ftp 服务器获取文件 (proftpd)
【发布时间】:2014-02-06 11:46:12
【问题描述】:

我有网站,从远程 ftp 服务器 (linux proftpd) 加载配置文件(每个网页 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 设置(默认)还是其他?

【问题讨论】:

    标签: php ftp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多