我尝试使用Laravel Storage功能将大文件上传到ftp服务器并且它会继续给我一个erorr
内存不足(分配473432064)(试图分配467402752字节)
我试图更改php.ini的内存限制,但是当我将文件正常上传到服务器并且其大小达到剂量时,它仍然无法正常工作。
我尝试了一切,但没有任何工作。 再次 - 我试图通过FTP上传。
还有一个问题:有一种方法可以将文件从客户端直接上传到ftp服务器吗?我看到存储首先上传到我的服务器然后转移到第二台服务器...
答案 0 :(得分:0)
它肯定听起来像一个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,并且文档看起来有点朦胧,绝对是一个值得查看的选项:)
答案 1 :(得分:0)
最后,我使用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存储选项。