247 lines
10 KiB
PHP
247 lines
10 KiB
PHP
#!/usr/bin/php
|
|
<?php
|
|
error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE ^ E_STRICT);
|
|
include_once(__DIR__.'/../includes/auto_prepend.php');
|
|
|
|
include_once(FWK_PATH.'common/curl.php');
|
|
include_once(FWK_PATH.'common/dates.php');
|
|
include_once(FWK_PATH.'mail/sendMail.php');
|
|
|
|
$strInfoScript='Usage : '.basename($argv[0]). " [OPTIONS]
|
|
Téléchargement et mise à jour d'informations en provenance de Bases Internet.
|
|
|
|
Options:
|
|
-v Mode debug
|
|
|
|
(*): Valeur par défaut !
|
|
";
|
|
$modeDebug=false;
|
|
$strMailInfo='';
|
|
|
|
$argv=$_SERVER['argv'];
|
|
if ($_SERVER['argc']>1)
|
|
{
|
|
for ($i=1; isset($argv[$i]); $i++) {
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
switch (substr($argv[$i],1,1)) {
|
|
case 'v': $modeDebug=true; break;
|
|
case '-':
|
|
case '?': die($strInfoScript); break;
|
|
default: die('Option '. $argv[$i] . " inconnue !\n");
|
|
break;
|
|
}
|
|
} else {
|
|
$tabFichier[$j]=$argv[$i];
|
|
$j++;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
** Registre français des émissions polluantes.
|
|
**/
|
|
|
|
$message=date('Y/m/d - H:i:s')." - Demande de récupération du fichier du Registre français des émissions polluantes.".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
|
|
$fichierZipIREP=REP_TEMP.'Base_iREP.zip';
|
|
if (!file_exists($fichierZipIREP) || date('Ymd',filemtime($fichierZipIREP))<>date('Ymd')) {
|
|
$url='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/XML/dump.php';
|
|
$cookie=$post='';
|
|
$referer='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/';
|
|
$page=getUrl($url, $cookie, $post, $referer);
|
|
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Début de récupération du fichier des émissions polluantes...".EOL;
|
|
|
|
$url='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/downloads/Base_iREP.zip';
|
|
$referer='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/generic.php?strType=download';
|
|
$page=getUrl($url, $cookie, $post, $referer);
|
|
$zip=preg_replace('/(^HTTP.*\r\nPK)/Us','PK', $page['body']);
|
|
$fp=fopen($fichierZipIREP, 'w');
|
|
fwrite($fp, $zip);
|
|
fclose($fp);
|
|
$message=date('Y/m/d - H:i:s')." - Fichier du Registre français des émissions polluantes téléchargé.".EOL;
|
|
} else {
|
|
$message=date('Y/m/d - H:i:s')." - Fichier du Registre français des émissions polluantes lu dans le cache.".EOL;
|
|
}
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
|
|
$zip = new ZipArchive;
|
|
if ($zip->open($fichierZipIREP) === TRUE) {
|
|
$tabFichiersConnus=array( 'emissions.csv'=> 'emissions',
|
|
'etablissements.csv'=> 'etablissements',
|
|
'Prelevements.csv'=> 'Prelevements',
|
|
'Prod_dechets_dangereux.csv'=> 'Prod_dechets_dangereux',
|
|
'Prod_dechets_non_dangereux.csv'=> 'Prod_dechets_non_dangereux',
|
|
'Trait_dechets_dangereux.csv'=> 'Trait_dechets_dangereux',
|
|
'Trait_dechets_non_dangereux.csv'=> 'Trait_dechets_non_dangereux',
|
|
/*
|
|
'activite_gidic_etablissements.csv'=> 'activite_gidic_etablissements',
|
|
'activite_ippc_etab.csv'=> 'activite_ippc_etab',
|
|
'caracteristique_du_dechet.csv'=> 'caracteristique_du_dechet',
|
|
'dechets.csv'=> 'dechets',
|
|
'dechets_non_dangereux.csv'=> 'dechets_non_dangereux',
|
|
'emission.csv'=> 'emission',
|
|
'etablissements.csv'=> 'etablissements',
|
|
'MCD_iREP.pdf'=> '',
|
|
'polluants_liste.csv'=> 'polluants_liste',
|
|
'prelevements_en_eau.csv'=> 'prelevements_en_eau',
|
|
'proddechetnondang.csv'=> 'proddechetnondang',
|
|
'projections.csv'=> 'projections',
|
|
'rejets_etablissements.csv'=> 'rejets_etablissements',
|
|
'traitedechetdang.csv'=> 'traitedechetdang',
|
|
'traitedechetnondang.csv'=> 'traitedechetnondang',
|
|
*/
|
|
);
|
|
|
|
$iDb=new WDB('pollutions');
|
|
$tabFichiers=$tabSize=$tabTime=array();
|
|
for ($i=0; $i<$zip->numFiles;$i++) {
|
|
$tabIndex=$zip->statIndex($i);
|
|
$tabFichiers[]=$tabIndex['name'];
|
|
$tabSize[]=$tabIndex['size'];
|
|
$tabTime[]=$tabIndex['mtime'];
|
|
// print_r($tabIndex);die();
|
|
if ($modeDebug){
|
|
echo date('Y/m/d - H:i:s')." - Fichier ".basename($tabIndex['name'])."en cache datant du ".date('d/m/Y H:i:s', filectime(REP_TEMP.$tabIndex['name']))." (".round(filesize(REP_TEMP.$tabIndex['name'])/1024,1)." ko)".EOL;
|
|
echo date('Y/m/d - H:i:s')." - Fichier dans l'archive téléchargée datant du ".date('d/m/Y H:i:s', $tabIndex['mtime'])." (".round($tabIndex['size']/1024,1)." ko)".EOL;
|
|
}
|
|
}
|
|
$zip->extractTo(REP_TEMP);
|
|
$zip->close();
|
|
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Décompression des $i fichiers du Registre français des émissions polluantes OK.".EOL;
|
|
if (count($tabFichiersConnus)<>$i) {
|
|
$message=date('Y/m/d - H:i:s')." - ERREUR - Nombre de fichiers décompressés : $i fichiers dans $fichierZipIREP contre ".$tabFichiersConnus.' attendus !'.EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du chargement des fichiers Pollutions (ERREUR)", $strMailInfo);
|
|
die();
|
|
}
|
|
foreach ($tabFichiers as $idxF=>$nomFichier) {
|
|
if (in_array(basename(str_replace('.csv', '', $nomFichier)),$tabFichiersConnus)) {
|
|
$table=str_replace('.csv', '', $tabFichiersConnus[basename($nomFichier)]);
|
|
if ($table<>'') {
|
|
$table='iREP_'.$table;
|
|
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Chargement de la table $table...".EOL;
|
|
$tabTailles=$tabTypes=array();
|
|
$fp = fopen(REP_TEMP.$nomFichier, 'r');
|
|
$nbLignes=$nbInsert=0;
|
|
while (($data = fgetcsv($fp, 5000, ';')) !== 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 `$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 = '".basename($nomFichier)." du ".date('d/m/Y H:i', $tabTime[$idxF])." (".round($tabSize[$idxF]/1024)." ko)'";
|
|
if ($iDb->query($sql)) {
|
|
$message=date ('Y/m/d - H:i:s')." - Création de la table $table OK...".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
} else {
|
|
$message=$iDb->getLastError().EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
$message=date ('Y/m/d - H:i:s')." - Impossible de créer la table $table !".EOL."Requête SQL = $sql".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du chargement des fichiers Pollutions (ERREUR)", $strMailInfo);
|
|
die();
|
|
}
|
|
continue;
|
|
}
|
|
|
|
$tabDataToInsert=array();
|
|
while (count($data)<$nbColonnes) {
|
|
// En cat de saut de ligne mal géré par la source
|
|
$data = array_merge($data,fgetcsv($fp, 5000, ';'));
|
|
}
|
|
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]);
|
|
|
|
if (@gettype($data[$i])=='string') {
|
|
if (is_numeric($data[$i])) {
|
|
if (round($data[$i]*1)<>($data[$i]*1))
|
|
$tabTypes[$i][]='double';
|
|
else
|
|
$tabTypes[$i][]='integer';
|
|
} else
|
|
$tabTypes[$i][]='string';
|
|
} else $tabTypes[$i][]=@gettype($data[$i]);
|
|
}
|
|
|
|
$ret=$iDb->insert($table, $tabDataToInsert);
|
|
if ($ret!=1) {
|
|
$message=date ('Y/m/d - H:i:s') . " - ERREUR SQL sur la table '$table', SQL no ".mysql_errno().' : '.mysql_error().EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
$message=date ('Y/m/d - H:i:s') . " - ERREUR à l'insertion de la ligne n°$i : ". implode(';', $data) ." !".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
$message=print_r($tabDataToInsert,1);
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
}
|
|
unset($tabDataToInsert);
|
|
}
|
|
fclose($fp);
|
|
// On réduit la taille des colonnes au max de chaque champ
|
|
for($i=0; $i<$nbColonnes; $i++) {
|
|
if ($tabTailles[$i]<256) {
|
|
$tabTmp=array_unique($tabTypes[$i]);
|
|
print_r($tabTmp);
|
|
$strType="VARCHAR(".$tabTailles[$i].")";
|
|
if (count($tabTmp)==1) {
|
|
reset($tabTmp);
|
|
switch (current($tabTmp)) {
|
|
case 'boolean': $strType='BOOL'; break;
|
|
case 'integer': $strType="BIGINT(".$tabTailles[$i].")"; break;
|
|
case 'double': $strType='DOUBLE'; break;
|
|
default: $strType="VARCHAR(".$tabTailles[$i].")";break;
|
|
}
|
|
}
|
|
$sql="ALTER TABLE `$table` CHANGE `".$champ[$i]."` `".$champ[$i]."` $strType NULL DEFAULT NULL ";
|
|
if ($iDb->query($sql)) {
|
|
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") passée à ". $tabTailles[$i] ."...".EOL;
|
|
} else {
|
|
$message=date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") à ". $tabTailles[$i] ." !".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$message=date ('Y/m/d - H:i:s') . " - Fichier $nomFichier non chargé (1) !".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
}
|
|
} else {
|
|
$message=date ('Y/m/d - H:i:s') . " - Fichier $nomFichier non chargé (2) !".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
}
|
|
}
|
|
} else {
|
|
$message=date('Y/m/d - H:i:s')." - ERREUR : Aucune archive détecté dans :".EOL.print_r($page['header']).EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
}
|
|
|
|
$message=date ('Y/m/d - H:i:s') . " - Fin de chargement du Registre français des émissions polluantes.".EOL;
|
|
echo $message;
|
|
$strMailInfo.=$message;
|
|
|
|
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com,suivi@scores-decisions.com', "Fin du chargement des fichiers Pollutions", $strMailInfo);
|
|
|
|
echo date('Y/m/d - H:i:s')." - Fin du script...".EOL;
|
|
|
|
?>
|