<?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é";

}

?>