У меня есть 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)