使用PHP中的大型csv文件更新mysql表

时间:2011-06-20 14:08:11

标签: php csv fgetcsv

我有一个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)

1 个答案:

答案 0 :(得分:0)

从命令行运行php文件。默认情况下,它没有设置超时 或者在php.ini中增加超时。