我正在尝试使用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库中的任何可能有帮助的设置?
答案 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。