脚本完成后,PHP CSV导入脚本会继续加载

时间:2018-10-18 07:23:34

标签: php laravel csv

我创建了一个小功能来导入CSV文件(约5K行)。导入工作正常,还返回了底部的视图,因此似乎所有代码都已执行。我在数据库中看到所有行都已插入。

但是,重定向后页面仍继续在浏览器中加载(无响应),而且我发现PHP仍在使用大量的内存。我不知道发生了什么,有人知道吗?

public function store(Request $request)
{
    $file = $request->file('eurofiberupload')->getRealPath();
    $handle = fopen($file, 'r');
    $firstrow=true;
    DB::table('upload')->truncate();
    while($row=fgetcsv($handle, 500, ';'))
    {
        if($firstrow===true)
        {
            $firstrow=false;
            continue;
        }

        Upload::create([
            'field0'=> $row[0],
            'field1' => utf8_encode($row[1]),
            'field2' => str_replace('NULL', 0, $row[3]),
            'field3' => floatval($row[4]),
            'field4' => floatval($row[5]),
            'field5' => $row[6],
            'field6' => $row[7],
            'field7' => floatval($row[8]),
        ]);
    }
    unset($row);
    fclose($handle);


    return redirect('/home')->with('success', 'All good!');

}

1 个答案:

答案 0 :(得分:0)

您可以测试返回的行是否为null或具有值。修改您的循环循环并执行以下操作:

{
    $file = $request->file('eurofiberupload')->getRealPath();
    $handle = fopen($file, 'r');
    $firstrow=true;
    DB::table('upload')->truncate();
    while(($row=fgetcsv($handle, 500, ';'))!=null)
    {
        if($firstrow===true)
        {
            $firstrow=false;
            continue;
        }

        Upload::create([
            'field0'=> $row[0],
            'field1' => utf8_encode($row[1]),
            'field2' => str_replace('NULL', 0, $row[3]),
            'field3' => floatval($row[4]),
            'field4' => floatval($row[5]),
            'field5' => $row[6],
            'field6' => $row[7],
            'field7' => floatval($row[8]),
        ]);
    }
    unset($row);
    fclose($handle);


    return redirect('/home')->with('success', 'All good!');

}

您可以尝试