Обновление таблицы MySQL с большим файлом CSV в PHP - PullRequest
0 голосов
/ 20 июня 2011

У меня есть 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 голосов
/ 20 июня 2011

Запуск php файла из командной строки. По умолчанию время ожидания не установлено.
Или увеличьте время ожидания в php.ini.

...