我正在使用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分钟,并且页面未重定向到我的页面,最后我收到页面未找到错误。请帮助我快速上传。
答案 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);