【发布时间】: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 设置(默认)还是其他?
【问题讨论】: