0

我必须从 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);
        }  

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

4

1 回答 1

-2

超时应该是PHP配置的错误。在 Laravel 控制器中,您可以使用set_time_limit(0); 在文件操作之前。请参阅: 如何解决 Laravel 5 中的超时错误

于 2020-04-01T10:03:30.260 回答