【问题标题】:How to upload big files via Storage-ftp in Laravel 5.1如何在 Laravel 5.1 中通过 Storage-ftp 上传大文件
【发布时间】:2016-06-15 21:07:34
【问题描述】:

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

内存不足(分配473432064)(尝试分配467402752字节)

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

我尝试了任何方法,但没有任何效果。 再次 - 我正在尝试通过 FTP 上传。

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

【问题讨论】:

  • 你能告诉你php.ini你有什么改变和价值吗?
  • 我将 post_max_size、内存限制和 upload_max_filesize 设置为 10240M,我的文件共享站点和文件可以达到 10 甚至 20 GB,当我直接上传到我的服务器时它工作正常但是当我尝试上传到第二台服务器时它不起作用,我现在正在使用 Apache 和 FileZila 处理 localhost

标签: php file laravel ftp storage


【解决方案1】:

这听起来像是一个 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

【讨论】:

    【解决方案2】:

    最后我用 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 的存储选项更好。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 2011-03-30
      • 2012-10-27
      • 2012-04-26
      • 2013-03-24
      • 2012-07-29
      • 2016-03-19
      • 2021-10-07
      相关资源
      最近更新 更多