如何在Codeigniter中将大型csv文件快速上传到mysql中?

时间:2019-06-07 12:03:08

标签: codeigniter csv

我正在使用codeigniter框架。我想将larg csv文件快速上传到mysql数据库。该文件包含87000行。我已添加用于上传数据,但加载时间超过1小时。我需要优化这次。请建议我。

if(move_uploaded_file($_FILES['file_content']['tmp_name'],$path.$actual_file_name))
            {
if (($handle = fopen($path.$actual_file_name, "r")) !== FALSE) 
    {               
    while (($data = fgetcsv($handle,100000, ",")) !== FALSE) 
    {
$insert_batch=array(    
'unique_transactionid' => mb_check_encoding($data[0], 'UTF-8') ? $data[0] : utf8_encode($data[0]),
'data-year' => mb_check_encoding($data[2], 'UTF-8') ? $data[2] : utf8_encode($data[2]),
'supplier_group' => mb_check_encoding($data[4], 'UTF-8') ? $data[4] : utf8_encode($data[4]),
);
this->db->insert('table name', $insert_batch);
}
}
}

我需要数据快速上传。当前,我们的服务器max_excecution时间为10分钟。它执行超过10分钟,并且页面未重定向到我的页面,最后我收到页面未找到错误。请帮助我快速上传。

1 个答案:

答案 0 :(得分:0)

从while循环中退出insert()函数,而使用batch_insert()。您现在正在做的是为每一行创建数组并插入。

$i=0;
while (($data = fgetcsv($handle,100000, ",")) !== FALSE) 
{
  $insert_batch[$i]=array(    
    'unique_transactionid' => mb_check_encoding($data[0], 'UTF-8') ? $data[0] : utf8_encode($data[0]),
    'data-year' => mb_check_encoding($data[2], 'UTF-8') ? $data[2] : utf8_encode($data[2]),
    'supplier_group' => mb_check_encoding($data[4], 'UTF-8') ? $data[4] : utf8_encode($data[4]),
  );
  $i++;
}
$this->db->insert_batch('table_name', $insert_batch);