gpt4 book ai didi

php - 在 PHP 中通过 SFTP 传输大文件

转载 作者:可可西里 更新时间:2023-11-01 12:57:27 27 4
gpt4 key购买 nike

我有一个大文件(200 MB 以上)。我需要通过 PHP cron 作业传输它。使用 Phpseclib 会出现以下错误:

Allowed memory size of 134217728 bytes exhausted (tried to allocate 4133 bytes) in /app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php

有什么方法可以用 PHP cron job 做到这一点?

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

$sftp->put('/Import/coupons/coupons_import_test.csv', $localFile, NET_SFTP_LOCAL_FILE);

附言。这需要在 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);

最佳答案

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

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

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

关于php - 在 PHP 中通过 SFTP 传输大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com