在PHP中通过SFTP传输大文件

Abh*_*hek 7 php cron sftp net-sftp phpseclib

我有一个大文件(200 MB以上).我需要通过PHP cron job转移它.使用Phpseclib会出现以下错误:

/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php中允许的内存大小为134217728个字节(尝试分配4133个字节)

有没有办法可以做到这一点PHP cron job

代码很简单,其中$ localFile是一个已经存在的CSV文件

$sftp->put('/Import/coupons/coupons_import_test.csv', $localFile, NET_SFTP_LOCAL_FILE);
Run Code Online (Sandbox Code Playgroud)

PS.这需要PHP/tmp文件夹中生成该文件后完成,因此传输脚本的时间必须发挥作用.

[编辑]我不打算增加内存限制,因为以后的文件可能会更大.我可以部分传输文件(附加模式)或使用PHP cron的一些shell脚本的解决方案是值得的

远程服务器上的文件大小为111.4 MB,而本地实际文件大得多.

[修复后编辑]从版本1.0更改为版本2.0.2后问题消失我必须修改put的代码

$sftp->put('/Import/coupons/coupons_import.csv', $localFile, $sftp::SOURCE_LOCAL_FILE);
Run Code Online (Sandbox Code Playgroud)

Paw*_*iel 2

Phpseclib 应该可以很好地传输大文件,而不需要增加可用内存。

我认为您可能遇到了老错误“SSH2:不根据窗口大小计算数据长度”。您很可能正在使用旧版本的 Phpseclib (旧的有问题的版本甚至与相对较新的软件(例如 Magento 1.9.*)捆绑在一起)

检查您的版本是否不是最新版本,从 https://github.com/phpseclib/phpseclib重新下载