如何通过 Laravel 5.1 中的 Storage-ftp 上传大文件

How to upload big files via Storage-ftp in Laravel 5.1

我正在尝试将大文件上传到具有 Laravel 存储功能的 ftp 服务器,但它一直给我错误

Out of memory (allocated 473432064) (tried to allocate 467402752 bytes)

我已经尝试更改 php.ini 上的内存限制,但它仍然无法正常工作,当我将文件正常上传到服务器时,它的工作和大小计量器。

我什么都试过了,但没有任何效果。 再次 - 我正在尝试通过 FTP.

上传

还有一个问题:有没有办法从客户端直接上传文件到ftp服务器?我看到存储先上传到我的服务器,然后传输到第二个服务器...

这听起来确实像是一个 PHP 限制,虽然提高内存限制可能不是最好的方法,但只会带来麻烦,相信我。

我能想到的最好的方法是使用 Envoy(服务器脚本方法而不是部署服务)来组合一个 SSH 任务,这样你的工作就会被执行 PHP 的 之外,因此您不会受到相同的内存限制。您的 Envoy 脚本(envoy.blade.php 在您的项目根目录中)可能看起来像这样;

@servers(['your_server_name' => 'your.server.ip'])

@task('upload', ['on' => ['your_server_name']])
    // perform your FTP setup, login etc.
    put your_big_file.extension
@endtask

我只为从 Jenkins 调用的部署作业设置了其中一个,所以我不确定你是否可以从 Laravel 中启动它,但我从命令行启动像这样;

vendor/bin/envoy run myJobName

就像我说的,我唯一不太记得的是你是否可以从 Laravel 内部 运行 Envoy,文档似乎有点模糊,绝对是一个值得的选择不过退房:)

https://laravel.com/docs/5.1/envoy

最后我用 curl 代替 Storage 解决了问题。

$ch = curl_init();
$localfile = $file->getRealPath();
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, 'ftp://domain/' . $fileName);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec($ch);
$error_no = curl_errno($ch);
curl_close($ch);

工作完美!比 laravel.

的存储选项更好