<?php
// ------------------------------------------------------------------------- //
// Traiter un gros fichier de requêtes INSERT simples (sur 1 ligne) //
// ------------------------------------------------------------------------- //
// Auteur: J-Pierre DEZELUS //
// Web: http://www.phpinfo.net/ //
// Email: jpdezelus@phpinfo.net //
// ------------------------------------------------------------------------- //
$Hote = "localhost";
$Base = "ma_base";
$User = "mon_user";
$Pass = "mon_password";
$Table = "ma_table"; // table à mettre à jour
$fichier = "requetes.sql"; // fichier initial
$nb_requetes = 100; // nb de requêtes à mettre dans chaque fichier
mysql_connect($Hote, $User, $Pass);
if (!isset($nbfic) || $nbfic == "") {
// on ouvre le fichier de base
$fp = fopen($fichier, "r");
$num_fic = 0;
$cpt = 0;
// on purge la table
$sql = "DELETE FROM $Table";
$resultat = mysql_db_query($Base, $sql);
// on découpe en n fichiers (en ne gardant que les requêtes INSERT
while ($ligne = fgets($fp, 1024)) {
if (ereg("^INSERT INTO $Table",$ligne)) {
$cpt++;
if ($cpt == 1) {
$num_fic++;
$fichier_out = $Table.sprintf("%02d",$num_fic).".sql";
$fo = fopen($fichier_out, "w");
}
fputs($fo, $ligne);
if ($cpt == $nb_requetes) {
fclose($fo);
$cpt = 0;
}
}
}
@fclose($fo);
fclose($fp);
// on redirige vers le traitement du 1er fichier
header("Cache-control: no-cache");
header("Location: maj-base.php3?table=$Table&nbfic=$num_fic&nofic=1");
} else {
// on traite le fichier n
$fichier = $Table.sprintf("%02d",$nofic).".sql";
$fp = fopen($fichier, "r");
while ($sql = fgets($fp, 1024)) {
mysql_db_query($Base, chop($sql));
}
fclose($fp);
// on supprime le fichier temporaire après traitement des requêtes
unlink($fichier);
if ($nofic < $nbfic) {
// il reste des fichiers à traiter, on redirige vers
header("Cache-control: no-cache");
header("Location: maj-base.php3?table=$Table&nbfic=$nbfic&nofic=".($nofic+1));
} else
echo "Traitement terminé";
}
?>