Phpseclib sftp put 超过 1 GB 的文件内存不足

标签 php phpseclib

我正在尝试使用 phpseclib 的 sftp 传输大型 zip 文件 put方法。 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 库中的任何设置可以提供帮助?

最佳答案

您正在运行超旧版本的 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 关键字 $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 以来已经发布了 6 个版本(0.2.2、0.3.0、0.3.1、0.3.5、0.3.6 和 0.3.7),因此请尝试 upgrading .

关于Phpseclib sftp put 超过 1 GB 的文件内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302098/

相关文章:

php - 遍历多行 mysqli 的列值

php - $_SERVER 变量的编码,如 $_SERVER ['REQUEST_URI' ]

phpseclib 使用自己的 CA 签署 CSR

php - 将 phpseclib 集成到 Laravel 5

php - 将字符串数组与数字匹配以获取数据库值

php - 使用php检查字段的值是否是mysql函数

php - 如何在单个 PHP 文件中使用不同的表单?

phpseclib连接MYSQL服务器

phpseclib 或 ssh2 pecl 扩展