上传CSV文件失败

时间:2018-01-17 10:25:48

标签: php laravel csv upload

对于客户,我需要上传一个cvs文件。该文件有近35000行。我使用了maatwebsite/excel包。

Excel::filter('chunk')->load($file->getRealPath())->chunk(100, 
    function($results) {
        foreach ($results as $row) {
            // Doing the  import in the DB
        }
    }
});

我无法更改max_execution_time,因为我们的服务器不允许执行超过300秒。

我尝试了另一种没有任何包装的尝试,但也失败了。

$csv = utf8_encode(file_get_contents($file));
$array = explode("\n", $csv);

foreach ($array as $key => $row) {
    if($key == 0) {
        $head = explode(',', $row);

        foreach ($head as $k => $item) {
            $h[$key][] = str_replace(' ', '_', $item);
        }
    }
    if($key != 0) {
        $product = explode(',', $row);

        foreach ($product as $k => $item) {
            if($k < 21)
                $temp[$key][$h[0][$k]] = $item;
        }
    }
}

foreach ($temp as $key => $value) {
    // Doing the  import in the DB
}

有没有人有想法?

修改

所以我做了一个工匠指挥。当我在终端中执行它时,它会被执行并导入所有35000行。感谢共同的感觉。

我无法弄清楚如何使命令运行asynchrone,以便用户可以关闭他的浏览器。任何人都可以解释如何完成这项工作吗?

1 个答案:

答案 0 :(得分:0)

请记住,任何文件(特别是大文件)都需要一段时间才能通过用户的网络浏览器上传到服务器,因此您绝对不希望无意中鼓励用户在关闭之前关闭其Web浏览器。文件已完全上传。

您可能可以更新代码,以便在文件上传后但在处理完之前向用户显示确认消息。

但是,我不知道在那时关闭浏览器是否会立即终止脚本(或者它是否会继续完成),或者是否需要在服务器上调用单独的程序(也许是cron)每隔几分钟运行一次作业,以解析任何新上传的文件,作为一项单独的任务?

(顺便提一下,请注意,由于StackExchange Q&amp; A格式的工作方式,我们强烈建议您在此问题中作为编辑 你原来的帖子,而不是“答案”(它不是)。

StackExchange不像旧的“线性”论坛:原始问题的修改或更新应该针对原始问题本身,而答案帖子应该仅用于问题的实际建议答案。 (除了我自己的最后一个应该是一个“评论”,但不幸的是我还没有足够的声誉点来这样做。))