batch/old/loadDbf.php
2013-06-19 08:24:49 +00:00

138 lines
4.2 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
include_once(FWK_PATH.'common/curl.php');
include_once(FWK_PATH.'common/chiffres.php');
include_once(FWK_PATH.'common/dates.php');
include_once(FWK_PATH.'common/dbf_class.php');
include_once(INCLUDE_PATH.'insee/classMInsee.php');
include_once(INCLUDE_PATH.'partenaires/classMRncs.php');
include_once(INCLUDE_PATH.'partenaires/classMBilans.php');
include_once(FWK_PATH.'mail/sendMail.php');
$db_name=$db_table='';
$j=0;
$dropBefore=false;
$strInfoScript='Usage : '.basename($argv[0]). " [OPTION] FICHIER
Charge un fichier dbf.
Options :
-d=nom_bdd Nom de la base de données
-t=nom_table Nom de la table
-e Détruire la table si elle existe déjà
(*): Valeurs par défaut !
";
for ($i=1; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 'd': $db_name=substr($argv[$i],3); break;
case 't': $db_table=substr($argv[$i],3); break;
case 'e': $dropBefore=true; break;
default: die('Option '. $argv[$i] . " inconnue !".EOL);
}
} else {
$fichier_csv[$j]=$argv[$i];
$j++;
}
}
if ($db_name=='') die("Base de données non communiquée !".EOL);
for ($nbFichiers=0; isset($fichier_csv[$nbFichiers]); $nbFichiers++) {
if ($db_table=='')
$nom_table=str_replace('.csv', '', str_replace('.txt', '', basename($fichier_csv[$nbFichiers])));
else
$nom_table=$db_table;
$comment='Chargement de fichier CSV';
/*$fp=fopen($fichier_csv[$nbFichiers], 'r');
if (!$fp) {
echo date ('Y/m/d - H:i:s')." - Impossible d'ouvrir le fichier : ".$fichier_csv[$nbFichiers]." !".EOL;
echo date ('Y/m/d - H:i:s') . " - Fin du traitement".EOL;
exit();
}
*/
$nbLignes=0;
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier ". $fichier_csv[$nbFichiers] ."...".EOL;
$dbf = @new dbf_class($fichier_csv[$nbFichiers]);
$num_rec=$dbf->dbf_num_rec;
$num_field=$dbf->dbf_num_field;
die("$num_rec $num_field".EOL);
for($i=0; $i<$num_rec; $i++) {
$row = $dbf->getRow($i);
for($j=0; $j<$num_field; $j++) {
echo $row[$j].' ';
}
echo('<br>');
die();
}
die();
while (($data = fgetcsv($fp, 3000, $separator)) !== FALSE) {
$nbLignes++;
if ($nbLignes==1) {
// L'entête contient la structure du fichier
// On compte le nombre de colonnes du fichier
$nbColonnes=count($data);
$sql="CREATE TABLE IF NOT EXISTS `$nom_table` (";
for($i=0; $i<$nbColonnes; $i++) {
$sql.='`'.$data[$i].'` LONGTEXT,';
$tabTailles[$i]=0;
$champ[$i]=$data[$i];
}
$sql=substr($sql,0,strlen($sql)-1); // Retrait de la dernière virgule
$sql.=") ENGINE = MYISAM COMMENT = '$comment'";
if ($dropBefore)
$iDb->query("DROP TABLE IF EXISTS `$nom_table`");
if ($iDb->query($sql))
echo date ('Y/m/d - H:i:s')." - Création de la table $nom_table OK...".EOL;
else {
echo $iDb->getLastError().EOL;
die(date ('Y/m/d - H:i:s')." - Impossible de créer la table $nom_table !".EOL."Requête SQL = $sql".EOL);
}
continue;
}
$tabDataToInsert=array();
for($i=0; $i<$nbColonnes; $i++) {
$tabDataToInsert=array_merge($tabDataToInsert, array($champ[$i]=>$data[$i]));
if (strlen($data[$i])>$tabTailles[$i])
$tabTailles[$i]=strlen($data[$i]);
}
//print_r($tabDataToInsert);
$ret=$iDb->insert($nom_table, $tabDataToInsert);
if ($ret!=1) {
echo date ('Y/m/d - H:i:s') . " - ERREUR à l'insertion de la ligne n°$i : ". implode(';', $data) ." !".EOL;
}
unset($tabDataToInsert);
}
fclose ($fp);
// On réduit la taille des colonnes au max de chaque champ
for($i=0; $i<$nbColonnes; $i++)
{
//$tabTailles[$i]=strlen($data[$i]);
if ($tabTailles[$i]<256) {
$sql="ALTER TABLE `$nom_table` CHANGE `".$champ[$i]."` `".$champ[$i]."` VARCHAR(".$tabTailles[$i].") NULL DEFAULT NULL ";
echo $sql;
if ($iDb->query($sql))
echo date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") passée à ". $tabTailles[$i] ."...".EOL;
else
echo date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") à ". $tabTailles[$i] ." !".EOL;
flush();
}
}
echo 'Tailles max / champ:'.EOL;
print_r($tabTailles);
}
echo date ('Y/m/d - H:i:s')." - Fin du traitement.".EOL;
?>