【问题标题】:Downloading and Reading Large Files Using Laravel Storage使用 Laravel 存储下载和读取大文件
【发布时间】:2019-09-23 04:40:25
【问题描述】:

我必须从 SFTP 读取一个大约 500MB 的大型 json 文件。我正在使用 laravel 存储来读取文件。首先,我将文件下载到本地 storage/app/public 文件夹中,然后逐行从本地文件夹中读取文件,并将文件内容附加到变量中。之后,我解码 json 数据并将每条记录保存在数据库中。但是我有时会遇到内存耗尽错误,甚至是最大超时错误。我使用 php ini 函数将内存限制 1024M 和执行时间增加到 600,并尝试了许多解决方案,但没有一个有效。以下是我的代码:

        $stream = Storage::disk('incoming_feed_server')->getDriver()->readStream($fileName);

        while(ob_get_level() > 0) ob_end_flush();

        //save file onto local system
        Storage::disk('public')->put($newFileNAmeWithDate, $stream); 

        $handle = fopen(storage_path('app/public/'.$newFileNAmeWithDate), "r") or die("Couldn't get handle");

        $content = '';
        if ($handle) {
            while (!feof($handle)) {
                $content.= fgets($handle, 4096);                    
            }
            fclose($handle);
        }  

请让我知道这个问题的正确解决方案。提前致谢!

【问题讨论】:

  • 为什么要将 500mb 放入变量中?这没有任何意义。你要无限期地增加时间/内存限制吗?

标签: php laravel-storage


【解决方案1】:

超时应该是PHP配置的错误。在 Laravel 控制器中,您可以在文件操作之前使用 set_time_limit(0);。 请参见: How to solve a timeout error in Laravel 5

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多