【问题标题】:updating a mysql table with a large csv file in PHP在 PHP 中使用大型 csv 文件更新 mysql 表
【发布时间】:2011-06-20 22:45:50
【问题描述】:

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

【问题讨论】:

  • ini_set('max_execution_time', 0) 将禁用 PHP 超时。
  • 尝试在函数的开头添加这些说明:set_time_limit(0); ini_set("memory_limit", "1024M");
  • 试试这个链接 我相信这个人在用php codingforums.com/archive/index.php/t-185657.html中的csv文件更新mysql表时遇到了和你类似的问题
  • 您可以通过简单的 REPLACE 查询来减少查询次数(必须选择和插入/更新)。
  • 我已经添加了ini_set('max_execution_time', 0)ini_set("memory_limit", "1024M"); -> 脚本运行时间更长,但我没有得到回复我也会在明天查看 REPLACE 语句,这可能会减少一些执行时间.

标签: php csv fgetcsv


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2014-01-06
    • 2017-08-09
    • 1970-01-01
    • 2011-04-16
    • 2016-11-04
    • 2015-06-28
    • 2017-11-02
    相关资源
    最近更新 更多