在我的 Laravel 应用程序的计划任务中,我在外部 FTP 服务器上读取了几个大的 gzipped CSV 文件,范围从 80mb 到 4gb,其中包含我根据产品属性存储在我的数据库中的产品。
我遍历要导入的产品提要列表,但每次都返回一个致命错误:“已用尽 536870912 字节的允许内存大小”。我可以增加极的长度参数fgetcsv从函数1000到100000其解决的较小的文件(<500MB)的问题,但对于较大的文件,将返回致命错误。
有没有一种解决方案可以让我下载或解压缩 .csv.gz 文件、读取行(按批次或逐行)并将产品插入到我的数据库中而不会耗尽内存?
$feeds = [
"feed_baby-mother-child.csv.gz",
"feed_computer-games.csv.gz",
"feed_general-books.csv.gz",
"feed_toys.csv.gz",
];
foreach ($feeds as $feed) {
$importedProducts = array();
$importedFeedProducts = 0;
$csvfile = 'compress.zlib://ftp://' . config('app.ftp_username') . ':' . config('app.ftp_password') . '@' . config('app.ftp_host') . '/' . $feed;
if (($handle = fopen($csvfile, "r")) !== FALSE) {
$row = 1;
$header = fgetcsv($handle, 1, "|");
while (($data = fgetcsv($handle, 1000, …Run Code Online (Sandbox Code Playgroud)