2012-10-16 07:44:31 +00:00
|
|
|
|
#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
error_reporting(E_ALL ^ E_NOTICE);
|
|
|
|
|
|
|
|
|
|
|
2013-06-19 08:24:49 +00:00
|
|
|
|
/** @todo Si MAJ en annule et remplace pr<EFBFBD>voir les manips SQL suivantes :
|
|
|
|
|
** Cr<EFBFBD>ation d'une table insee.tmp sans aucun index
|
2012-10-16 07:44:31 +00:00
|
|
|
|
** A la fin du chargement construire les index
|
|
|
|
|
** Si pas d'erreur :
|
|
|
|
|
** 1. detruire insee
|
|
|
|
|
** 2. Renommer insee.tmp en insee
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
set_time_limit(0);
|
|
|
|
|
$heureDebut=TIME_LISIBLE;
|
|
|
|
|
$dateJour=DATE;
|
|
|
|
|
$dateJourFormat=substr(DATETIME,0,4).'-'.substr(DATETIME,4,2).'-'.substr(DATETIME,6,2);
|
|
|
|
|
$db_name=$db_table='';
|
|
|
|
|
$j=0;
|
|
|
|
|
$dropBefore=false;
|
|
|
|
|
|
|
|
|
|
$argv=$_SERVER['argv'];
|
|
|
|
|
if ($_SERVER['argc']==1) die('Usage : '.basename($argv[0]). " [OPTION]... FICHIER
|
2013-06-19 08:24:49 +00:00
|
|
|
|
Charger un fichier CSV dans une base de donn<EFBFBD>es avec cr<EFBFBD>ation de la table qui aura le nom du fichier charg<EFBFBD>..
|
2012-10-16 07:44:31 +00:00
|
|
|
|
|
|
|
|
|
Options disponibles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Les arguments obligatoires pour les options de formes longues le sont aussi
|
|
|
|
|
pour les options de formes courtes.
|
2013-06-19 08:24:49 +00:00
|
|
|
|
-s=CHAR s<EFBFBD>parateur de champs (virgule, point-virgule*, /t=TAB, /p=|, etc...)
|
|
|
|
|
-c=CHAR caract<EFBFBD>re encadrant les zones alphanum<EFBFBD>riques (inop<EFBFBD>rationnel)
|
|
|
|
|
-d=nom_bdd Nom de la base de donn<EFBFBD>es
|
2012-10-16 07:44:31 +00:00
|
|
|
|
-t=nom_table Nom de la table
|
2013-06-19 08:24:49 +00:00
|
|
|
|
-e D<EFBFBD>truire la table si elle existe d<EFBFBD>j<EFBFBD>
|
2012-10-16 07:44:31 +00:00
|
|
|
|
|
2013-06-19 08:24:49 +00:00
|
|
|
|
(*): Valeurs par d<EFBFBD>faut !
|
2012-10-16 07:44:31 +00:00
|
|
|
|
");
|
|
|
|
|
for ($i=1; isset($argv[$i]); $i++) {
|
|
|
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
|
|
|
switch (substr($argv[$i],1,1)) {
|
|
|
|
|
case 's': $separator=substr($argv[$i],3); break;
|
|
|
|
|
case 'c': $chaine=substr($argv[$i],3); break;
|
|
|
|
|
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++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-06-19 08:24:49 +00:00
|
|
|
|
if ($db_name=='') die("Base de donn<6E>es non communiqu<71>e !".EOL);
|
2012-10-16 07:44:31 +00:00
|
|
|
|
|
|
|
|
|
$iDb=new WDB($db_name);
|
|
|
|
|
|
|
|
|
|
if ($separator=='/t') {
|
|
|
|
|
$separator="\t";
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo "s<EFBFBD>parateur = TAB\n";
|
2012-10-16 07:44:31 +00:00
|
|
|
|
} else if ($separator=='/p') {
|
|
|
|
|
$separator='|';
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo "s<EFBFBD>parateur = PIPE\n";
|
2012-10-16 07:44:31 +00:00
|
|
|
|
} elseif (!isset($separator) || $separator=='') {
|
|
|
|
|
$separator=';';
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo "s<EFBFBD>parateur = '$separator'\n";
|
2012-10-16 07:44:31 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo "s<EFBFBD>parateur = '$separator'\n";
|
2012-10-16 07:44:31 +00:00
|
|
|
|
|
2013-06-19 08:24:49 +00:00
|
|
|
|
// Mise <20> jour de la table PARAM
|
2012-10-16 07:44:31 +00:00
|
|
|
|
// -----------------------------
|
2013-06-19 08:24:49 +00:00
|
|
|
|
// 2 - pour la date et l'heure d'ex<65>cution du traitement en cours
|
2012-10-16 07:44:31 +00:00
|
|
|
|
|
|
|
|
|
/* $tabDataToUpdate=array('VALEUR'=>DATETIME,
|
|
|
|
|
'CLE'=>'INSEE_MAJ_ENCOURS');
|
|
|
|
|
$iparam->setParamValeur($tabDataToUpdate);
|
|
|
|
|
*/
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s') . " - D<>but du traitement".EOL;
|
2012-10-16 07:44:31 +00:00
|
|
|
|
flush();
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
/* $tabDataToUpdate=array( 'NUM'=>$numScript,
|
|
|
|
|
'DATE_JOUR'=>$dateJour,
|
|
|
|
|
'HEURE_DEBUT'=>$heureDebut,
|
|
|
|
|
'HEURE_FIN'=>$heureFin,
|
|
|
|
|
'CODE_RETOUR'=>0,
|
|
|
|
|
'NB_MAIL'=>1,
|
2013-06-19 08:24:49 +00:00
|
|
|
|
'RESUME_EXEC'=>"Impossible d'ouvrir le fichier n<>$nbFichiers <20> traiter : $nomFichier.");*/
|
2012-10-16 07:44:31 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s') . " - Fin du traitement".EOL;
|
|
|
|
|
exit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$nbLignes=0;
|
|
|
|
|
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s')." - D<>but du traitement du fichier ". $fichier_csv[$nbFichiers] ."...".EOL;
|
2012-10-16 07:44:31 +00:00
|
|
|
|
flush();
|
|
|
|
|
|
|
|
|
|
while (($data = fgetcsv($fp, 3000, $separator)) !== FALSE)
|
|
|
|
|
{
|
|
|
|
|
//echo "\nLigne #$nbLignes:\n";
|
|
|
|
|
//print_r($data);
|
|
|
|
|
$nbLignes++;
|
|
|
|
|
|
|
|
|
|
if ($nbLignes==1)
|
2013-06-19 08:24:49 +00:00
|
|
|
|
{ // L'ent<6E>te contient la structure du fichier
|
2012-10-16 07:44:31 +00:00
|
|
|
|
// 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];
|
|
|
|
|
}
|
2013-06-19 08:24:49 +00:00
|
|
|
|
$sql=substr($sql,0,strlen($sql)-1); // Retrait de la derni<6E>re virgule
|
2012-10-16 07:44:31 +00:00
|
|
|
|
//$sql.="NOM LONGTEXT, PRENOM LONGTEXT, NUSAGE LONGTEXT) TYPE = MYISAM COMMENT = '$comment'";
|
|
|
|
|
$sql.=") ENGINE = MYISAM COMMENT = '$comment'";
|
|
|
|
|
//echo $sql;
|
|
|
|
|
if ($dropBefore)
|
|
|
|
|
$iDb->query("DROP TABLE IF EXISTS `$nom_table`");
|
|
|
|
|
if ($iDb->query($sql))
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s')." - Cr<43>ation de la table $nom_table OK...".EOL;
|
2012-10-16 07:44:31 +00:00
|
|
|
|
else {
|
|
|
|
|
echo $iDb->getLastError().EOL;
|
2013-06-19 08:24:49 +00:00
|
|
|
|
die(date ('Y/m/d - H:i:s')." - Impossible de cr<63>er la table $nom_table !".EOL."Requ<EFBFBD>te SQL = $sql".EOL);
|
2012-10-16 07:44:31 +00:00
|
|
|
|
}
|
|
|
|
|
flush();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$tabDataToInsert=array();
|
|
|
|
|
|
|
|
|
|
for($i=0; $i<$nbColonnes; $i++) {
|
|
|
|
|
/* if ($i==1) {
|
|
|
|
|
$tabM=explode(' ', $data[$i]);
|
|
|
|
|
if (strlen($tabM[0])<=2) {
|
|
|
|
|
$nom=$tabM[0].' '.$tabM[1];
|
|
|
|
|
// unset($tabM[0]);
|
|
|
|
|
unset($tabM[1]);
|
|
|
|
|
}
|
|
|
|
|
else $nom=$tabM[0];
|
|
|
|
|
unset($tabM[0]);
|
|
|
|
|
$tabM=preg_split('/( NEE | NE )/i', implode(' ', $tabM));
|
|
|
|
|
$prenom=$tabM[0];
|
|
|
|
|
$usage=$tabM[1];
|
|
|
|
|
$tabDataToInsert=array_merge($tabDataToInsert, array('NOM'=>$nom, 'PRENOM'=>$prenom, 'NUSAGE'=>$usage));
|
|
|
|
|
} else*/
|
|
|
|
|
$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) {
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s') . " - ERREUR <20> l'insertion de la ligne n<>$i : ". implode(';', $data) ." !".EOL;
|
2012-10-16 07:44:31 +00:00
|
|
|
|
flush();
|
|
|
|
|
}
|
|
|
|
|
unset($tabDataToInsert);
|
|
|
|
|
}
|
|
|
|
|
fclose ($fp);
|
|
|
|
|
|
2013-06-19 08:24:49 +00:00
|
|
|
|
// On r<>duit la taille des colonnes au max de chaque champ
|
2012-10-16 07:44:31 +00:00
|
|
|
|
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))
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") pass<73>e <20> ". $tabTailles[$i] ."...".EOL;
|
2012-10-16 07:44:31 +00:00
|
|
|
|
else
|
2013-06-19 08:24:49 +00:00
|
|
|
|
echo date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") <20> ". $tabTailles[$i] ." !".EOL;
|
2012-10-16 07:44:31 +00:00
|
|
|
|
flush();}
|
|
|
|
|
}
|
|
|
|
|
echo 'Tailles max / champ:'.EOL;
|
|
|
|
|
print_r($tabTailles);
|
|
|
|
|
}
|
|
|
|
|
echo date ('Y/m/d - H:i:s')." - Fin du traitement.".EOL;
|
|
|
|
|
die();
|
|
|
|
|
function ecrireFichier($fichier,$texte){
|
|
|
|
|
$fp = fopen($fichier, "a");
|
|
|
|
|
fwrite($fp, $texte."\r\n");
|
|
|
|
|
fclose ($fp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function valideSiret($SIRET) {
|
|
|
|
|
if (!is_numeric($SIRET))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
$somme=0;
|
|
|
|
|
for ($i=0; $i<=12; $i+=2) { // Traitement PAIR
|
|
|
|
|
$var_tmp=(string)(2*((integer)substr($SIRET,$i,1)));
|
|
|
|
|
$som_tmp=0;
|
|
|
|
|
for($j=0;$j<strlen($var_tmp);$j++)
|
|
|
|
|
$som_tmp+=(integer)substr($var_tmp,$j,1);
|
|
|
|
|
$somme+=$som_tmp;
|
|
|
|
|
}
|
|
|
|
|
for ($i=1; $i<=13; $i+=2) // Traitement IMPAIR
|
|
|
|
|
$somme+=(integer)substr($SIRET,$i,1);
|
|
|
|
|
|
|
|
|
|
if ((integer)($somme/10)!=($somme/10))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|