Laravel Excel,对数据进行分块时出现内存不足的问题

时间:2018-12-26 07:24:50

标签: laravel memory-leaks vagrant laravel-excel

我在项目中使用Laravel Excel软件包。我有一个问题,当我导入行时,脚本会在过程中停止,并显示有关内存使用量限制的消息。 考虑到我正在分块处理数据,以避免内存相关的问题,这真是奇怪。这是代码:

public function process($file, Import $import)
{
    $newArr = $this->getColumnNamesReformatted($file);

    Excel::filter('chunk')->load($file)->chunk(1000, $this->setData($newArr, $import));
}

/**
 * @param $newArr
 * @param $import
 * @return \Closure
 */
public function setData($newArr, $import)
{
    return function ($results) use ($newArr, $import){

        foreach ($results as $row){
            $values = array_values($row->all());
            $data = [
                'import_id' => $import->id
            ];
            foreach ($values as $key => $value){
                if(in_array($newArr[$key], config('billing.columns'))){
                    $data[$newArr[$key]] = $value;
                }
            }

            $data['usage_start_at'] = Carbon::parse($data['lineItem_UsageStartDate']);
            $data['usage_end_at']   = Carbon::parse($data['lineItem_UsageEndDate']);
            Record::create($data);

            echo "|";
        }
    };
}

我似乎无法理解内存泄漏在哪里。顺便说一句-仅当我在具有1 GB RAM的Vagrant VM中运行代码时才会出现问题。当我在本地运行相同的代码时-它会完成所有必需的操作而没有任何麻烦。

1 个答案:

答案 0 :(得分:0)

您是否尝试过增加php.ini中的“ memory_limit”。如果不尝试一次!

  

php -i | grep“ php.ini”

使用上述命令,您将获得已加载的配置文件。

增加memory_limit并重新启动Web服务器。