加速op phpseclib sftp的方法可以下载远程文件

时间:2015-01-07 22:27:50

标签: php sftp phpseclib

所以我使用phpseclib,它在大约45秒内通过sftp下载50MB文件。与ssh2_scp_recv()相比,这个速度要快90秒,但与我的sftp客户端(filezilla)相比较慢,最长需要10秒。

我的问题是,除了启用我已经完成的mcrypt,gmp和bcmath扩展之外,我还能通过sftp加速文件下载?

我在Windows 7上运行PHP 5.5,并且在使用cli或者浏览器/ apache时使用sftp->得到相同的结果,可以整体下载文件,或者以块的形式下载文件各种尺寸。

来源:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
require 'phpseclib/Net/SFTP.php';

$sftp = new Net_SFTP($host, $port, $timeout);
$sftp->login($user, $password);

$sftp->get($remoteFile, $localFile);

1 个答案:

答案 0 :(得分:3)

使用SFTP协议,客户端(客户端库)使用" READ"反复请求获取文件内容块。

phpseclib使用的一个愚蠢的实现,发送一个" READ"请求(最多32 kB),等待" DATA"响应,发送另一个" READ"请求,等待,等等,直到它获得整个文件。

如果往返服务器的往返时间很长(大延迟),则客户端(库)可能在大多数情况下无用等待。

智能客户端(图书馆)通过发送多个" READ"来克服这个问题。请求,无需等待响应,或使用大型" READ"要求,或两者兼而有之。

例如,FileZilla发送一个32 kB" READ"的序列。请求最多1 MB的数据。

phpseclib不支持此优化(请注意,它适用于上传)。

你所能做的就是增加" READ"请求,使用Net_SFTP::max_sftp_packet

相关问题