Php 将csv文件中的大数据插入数据库
我正在使用csvreader.php来处理这项工作。所以问题是,当我尝试在localhost中上载30k行的文件时,脚本工作正常,但当我使用ipage host时,30秒后会出现内部服务器错误。 这是我正在使用的代码:Php 将csv文件中的大数据插入数据库,php,mysql,csv,client-side,Php,Mysql,Csv,Client Side,我正在使用csvreader.php来处理这项工作。所以问题是,当我尝试在localhost中上载30k行的文件时,脚本工作正常,但当我使用ipage host时,30秒后会出现内部服务器错误。 这是我正在使用的代码: $result = $this->csvreader->parse_file('/downloads/test.csv);//path to csv file $this->admin_model->add_csv($result); public fu
$result = $this->csvreader->parse_file('/downloads/test.csv);//path to csv file
$this->admin_model->add_csv($result);
public function add_csv($data)
{
$this->db->insert_batch('my_contacts', $data);
}
这就是我使用的模型:
$result = $this->csvreader->parse_file('/downloads/test.csv);//path to csv file
$this->admin_model->add_csv($result);
public function add_csv($data)
{
$this->db->insert_batch('my_contacts', $data);
}
正如我之前所说的,该脚本在localhost(超过30k行)和ipage上都可以正常工作,但只要行数少于1k即可。
那么,我如何才能让这个脚本像localhost一样在ipage上工作呢?如果它在30秒后死亡,几乎可以肯定是服务器超时。检查php.ini和服务器配置设置
在过去,我必须批量处理非常大的DB insert作业,在这些作业中,导入、转换和写入的开销很高。如果CSV数据是安全的,并且您确定没有安全风险,请尝试使用MySQL命令:
内联加载数据
导入大型CSV文件的速度非常快。由于CSV文件太大,文件执行时间可能太长
尝试增加页面的最大执行时间设置,例如,在页面顶部添加以下内容
ini_set('max_execution_time', 300);
注意,300指的是300秒或5分钟。我确实做到了,我修改了php.ini,我做到了:
Max_input_time = -1 // unlimited
Max_execution_time = -1 // unlimited
Memory_limit = 258M
我尝试了max_execution_time=1000,但它不起作用,在我设置了这些参数之后,它就起作用了。
谢谢大家 解决这类问题最可靠的方法是分步实施。i、 不要试图在一次执行中添加所有记录
您的CSV文件有许多行,每行都应该是数据库中的一行。让它像分页一样,在每一页中,我们可以说,它将插入15行
换句话说,从读取CSV文件开始,对其内容进行分页,然后插入这些内容,然后使用任何重定向技术(我更喜欢使用javascript)重定向到下一页 0=unlimited,而不是-1,所有的php设置都应该小写在基于web的php脚本(由apache运行)中使用unlimited执行时间是一个非常糟糕的主意。