open($path . ".zip") === true) { $zip->extractTo($path, "centri-di-costo_json.json"); $zip->close(); } // Lo cancelliamo unlink($path . ".zip"); alertManager::printCliInfo("\tInizio a iterare i centri di costo"); // Apriamo il file con SplFileObject per non doverlo caricare tutto $pseudo_json_lines = new SplFileObject($path . DIRECTORY_SEPARATOR . "centri-di-costo_json.json"); $processed = 0; // Avviamo una transazione $pdo->beginTransaction(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $accumulated = []; $bind = []; // Per ogni linea abbiamo un json separato while (!$pseudo_json_lines->eof()) { $line = $pseudo_json_lines->current(); $centro_di_costo = json_decode($line, true); // Inseriamo nel db if(!$centro_di_costo || empty($centro_di_costo["id_centro_di_costo"])) { $pseudo_json_lines->next(); continue; } $accumulated[] = $centro_di_costo["id_centro_di_costo"]; $accumulated[] = substr($centro_di_costo["denominazione_centro_di_costo"], 0, 254); $accumulated[] = $centro_di_costo["stato"] === "ATTIVO" ? "S": "N"; $accumulated[] = $centro_di_costo["codice_ausa"]; $accumulated[] = $centro_di_costo["stazione_appaltante_codice_fiscale"]; $bind[] = "(?, ?, ?, ?, ?) "; if(count($accumulated) >= 1000) { $processed += count($bind); $bind = implode(",", $bind); $statement = $pdo->prepare("REPLACE INTO b_centri_costo (uuid, denominazione, attivo, codice_ausa, cf) VALUES $bind"); $statement->execute($accumulated); $accumulated = []; $bind = []; } $pseudo_json_lines->next(); } if(!empty($accumulated) ) { $processed += count($bind); $bind = implode(",", $bind); $statement = $pdo->prepare("REPLACE INTO b_centri_costo (uuid, denominazione, attivo, codice_ausa, cf) VALUES $bind"); $statement->execute($accumulated); $accumulated = []; $bind = []; alertManager::printCliInfo("\tProcessati {$processed} centri di costo"); } // Committiamo la transazione $pdo->commit(); } catch(\Throwable $th) { $pdo->rollback(); throw $th; } // Eliminiamo il 'json' unlink($path . DIRECTORY_SEPARATOR . "centri-di-costo_json.json"); writeQueueLog("0","aggiornamentoCentriCosto"); } } else { alertManager::printCliWarning("GiĆ  eseguito"); } }