mysql データベースに更新する約 13000 行の CSV ファイルがあります。PHP 関数は、約 5000 行後にタイムアウトまたはメモリ オーバーフローで停止します。
fgetcsv を使用してすべての行をループし、行が既に存在するかどうかを確認します。これにより、タイムアウトが発生していると思います (SELECT/INSERT/UPDATE クエリ)。
テーブルにはまだ他のテーブルとの関係があるため、テーブルを削除してすべてを再挿入することはできません。->次に、たとえば5000行のブロックで複数の値の文字列を含む単一のINSERTステートメントを作成できます。
タイムアウトを防ぐために、ファイルをチャンクで読み取る方法を見つける必要があります。
事前にthx!
いくつかのコード:
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)