我有一个CSV文件,大约有13000行要更新到mysql数据库中。 我的PHP函数在大约5000行之后停止,超时或内存溢出。
它使用fgetcsv循环每一行并检查该行是否已存在,这导致我猜的超时(SELECT / INSERT / UPDATE查询)。
我不能删除表并重新插入所有内容,因为表仍然与其他表有关系。 - >然后,我可以用例如块中的多个值字符串编写单个INSERT语句。 5000行。
我需要找到一种方法来读取块中的文件以防止超时。
提前谢谢!一些代码:
private function readFile()
{
$this->profiler = NULL;
$this->auto_render = FALSE;
$this->request->headers['Content-Type'] = 'application/json';
if (array_key_exists('uploadedfile', $_FILES))
{
$filename = $_FILES['uploadedfile']['tmp_name'];
if ($_FILES['uploadedfile']['type'] == 'application/vnd.ms-excel') // csv file
{
if (is_uploaded_file($filename)) //check if file
{
if ($_FILES['uploadedfile']['error'] == UPLOAD_ERR_OK) //check no errors
{
// time limit : unlimited
set_time_limit(0);
// file handler
$filepointer = fopen($filename,'r');
return $filepointer;
}
}
}
}
}
在另一个函数中,我调用readFile()并循环这样的行:
while (($line = fgetcsv($filepointer, 1000, ";")) != false)
答案 0 :(得分:0)
从命令行运行php文件。默认情况下,它没有设置超时
或者在php.ini
中增加超时。