Phpseclib sftp使用1 GB +文件耗尽内存

时间:2014-04-25 20:08:48

标签: php phpseclib

我正在尝试使用phpseclib的sftp put方法传输大型zip文件。 1 GB左右的文件传输没有任何问题。但是,较大的文件在传输过程中达到1 GB标记后很快就会失败。

我收到这个PHP错误:

"PHP Fatal error:  Out of memory (allocated 89653248) 
(tried to allocate 3717163274 bytes) in 
../lib/phpseclib/Net/SSH2.php on line 1553".   

代码:

require_once('phpseclib/Net/SFTP.php');
require_once('phpseclib/Crypt/RSA.php');

$sftp = new Net_SFTP($host);
$key = new Crypt_RSA();
$key->loadKey(file_get_contents($privatekey));
$sftp->login($username, $key);

$sftp->put($remotefile, $localfile, NET_SFTP_LOCAL_FILE);

我的php.ini中的memory_limit设置被设置为-1。是否有任何其他PHP设置可能导致此限制?或者phpseclib库中的任何可能有帮助的设置?

1 个答案:

答案 0 :(得分:4)

您正在运行超级旧版本的phpseclib。你引用的1.21 / 1.46版本是通过CVS keyword $Id: $填充的,而phpseclib在几年内没有使用过CVS。

使用这些版本的phpseclib的最后一个发布版本(与单个文件提交版本相对)是0.2.1,该版本的最后一次提交是在2010年4月:

https://github.com/phpseclib/phpseclib/blob/0.2.1/phpseclib/Net/SFTP.php#L51

与没有CVS keyword $Id: $内容的0.2.2版本形成对比:

https://github.com/phpseclib/phpseclib/blob/0.2.2/phpseclib/Net/SFTP.php#L48

phpseclib目前为0.3.7。自0.2.1(0.2.2,0.3.0,0.3.1,0.3.5,0.3.6和0.3.7)以来已有6个版本发布,所以试试upgrading