138 lines
4.2 KiB
PHP
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;
|
|
|
|
?>
|