MySqlで毎日更新〜10.000アイテムが必要です。CSV ファイルをアップロードして、データベース データを更新しようとしました。私は2つのフィールドで分岐しています。私の問題は機能しますが、しばらくすると 504 Gateway Time-out が発生し、アップロードがプロセスを完了できないことです。
ここに私のコードがあります
if(is_uploaded_file($_FILES["filename"]["tmp_name"])){
//
move_uploaded_file($_FILES["filename"]["tmp_name"], "".$_SERVER["DOCUMENT_ROOT"]."/upload/".$_FILES["filename"]["name"]);
$file_path="".$_SERVER["DOCUMENT_ROOT"]."/upload/".$_FILES["filename"]["name"]."";
$file=file_get_contents("".$file_path."");
$file=iconv("windows-1251", "utf-8",$file);
file_put_contents("".$file_path."",$file);
if(!setlocale(LC_ALL, 'ru_RU.utf8')) setlocale(LC_ALL, 'en_US.utf8'); if(setlocale(LC_ALL, 0) == 'C') die(' (ru_RU.utf8, en_US.utf8)');
if (($handle_f = fopen($file_path, "r")) !== FALSE) {
// csv
while (($data_f = fgetcsv($handle_f,99999,";"))!== FALSE) {
// ean13
$sql="SELECT id_product FROM ps_product WHERE reference = '".$data_f[0]."'";
$id_product = Db::getInstance()->getValue($sql,0);
// ,
if ($id_product) {
$sql=mysql_query("UPDATE `ps_product` SET `quantity` ='".$data_f[1]."' WHERE `reference`='".$data_f[0]."'");
echo "<p style='color:green'>Items<b>".$data_f[0]."</b> updated</p>";
} else{
echo "<p style='color:red '>Items<b>".$data_f[0]."</b> not found</p>";
}
}
echo "<b>Update is complited</b>";
}else{
echo "Can`t open imported file";
}
}else{
echo '
<h2>Quantity update:</h2>
<form action="'.$_SERVER["PHP_SELF"].'" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Load"><br>
</form>
';
}
現在、失敗ごとに最大 1000 個のファイルを Excel で分割し、データベースを更新しています。時間がかかります。アイデアを教えてもらえますか、それともコードにエラーがあるのでしょうか? 役に立たないと思うので、ajaxを使用して更新します。