<?php // création d'un fichier par région ou par DOM avec une information tous les 10 jours function synthese_regdom ($ficref, $type) { // ouvrir en lecture le fichier csv qu'on vient de créer $descscv = fopen ($ficref, "r"); // si l'ouverture s'est bien passée if ($descscv) { // lire la région ou le DOM $regdom = fgets ($descscv, 4); // tant que non fin de fichier while ($regdom) { // si la région ou le DOM a changé par rapport à la ligne précédente if ($regdom != $regdom_prec) { // si on remplissait un fichier if ($regdom_prec) { // si la ligne du jour n'y a pas été recopiée if ($ligmemo) // le faire fputs ($descout, $ligmemo); // fermer le fichier qu'on vient de remplir fclose ($descout); } // nouveau fichier à remplir $ficout = DIR_CSV."/vacsi-".$type."-".$regdom.".csv"; $descout = fopen ($ficout, "w"); // si l'ouverture s'est mal passée if (! $descout) // il pourra y avoir plusieurs erreurs du même type message ("Problème créer le fichier ".basename ($ficout)); // mémoriser la nouvelle région ou le nouveau département $regdom_prec = $regdom; // on commencera à afficher les données début janvier 2021 $dizaine = 0; } // sauter le ; qui suit la région ou le DOM fgetc ($descscv); // lire le reste de la ligne $ligmemo = fgets ($descscv, LG_MAX_CSV); // si on n'a encore rien enregistré pour cette dizaine de jours if ($ligmemo [0] == $dizaine && $ligmemo [1]) { // le faire fputs ($descout, $ligmemo); // cette ligne ne sera pas réutilisée $ligmemo = ""; // passer à la dizaine de jours suivante $dizaine = ($dizaine + 1) % 3; } // lire la région ou le DOM de la ligne suivante $regdom = fgets ($descscv, 4); } // si la ligne du jour n'a pas été recopiée if ($ligmemo) // le faire fputs ($descout, $ligmemo); // fermer le fichier qu'on vient de remplir fclose ($descout); // et celui qui était ouvert en lecture fclose ($descscv); } // sinon else message ("Problème pour relire le fichier ".basename ($chemcsv)); } /* Vérifie si le fichier local vacsi-reg.csv est à jour Si nécessaire, le reconstruit à partir du fichier de référence sur internet En extrait également les fichiers vacsi-reg-(..).csv et vacsi-dom-(..).csv */ function testmaj_regdom () { // fichier qui sert à déterminer si une mise à jour est utile $refdate = DIR_CSV."/vacsi-tot-reg.csv"; // les 2 fichiers à mettre à jour éventuellement $csvdom = "vacsi-dom.csv"; $csvreg = "vacsi-reg.csv"; $chemdom = DIR_CSV."/".$csvdom; $chemreg = DIR_CSV."/".$csvreg; // si les fichiers sont à jour if (filemtime ($refdate) <= filemtime ($chemdom)) { // on n'a rien à faire message ("Fichiers ".$csvreg." et ".$csvdom." supposés à jour"); return; } // url du fichier de référence $url = SITE_REF.vacsi_reg; // ouvrir cet url en lecture $descurl = fopen ($url, "r"); // si l'ouverture s'est bien passée if ($descurl) { // sauter la première ligne de l'url fgets ($descurl, LG_MAX_CSV * 2); // les 2 fichiers à mettre à jour éventuellement $nouvcsv1 = DIR_CSV."/vacsi-dom.new"; $nouvcsv2 = DIR_CSV."/vacsi-reg.new"; // ouvrir en écriture les fichier à créer ou à actualiser $descscv1 = fopen ($nouvcsv1, "w"); $descscv2 = fopen ($nouvcsv2, "w"); // si les ouvertures se sont bien passées if ($descscv1 && $descscv2) { // code des DOM dans l'ordre de leur numéro du fichier csv de référence $liste_codedom = array ("", "gua", "mar", "guy", "reu", "smi", "may", "sba", "sma"); // lire la première ligne de l'url $ligne_url = fgets ($descurl, LG_MAX_CSV); // séparer les différents champs de la ligne // on prévoie que des champs supplémentaires pourront apparaitre $args = explode (";", trim ($ligne_url), 20); // trouver le nombre de doses mémorisées $doses = (count ($args) - 2) / 3; // 2 colonnes seront à fusionner pour la dose 5 // à présent elle y est toujours, mais le test est explicatif if ($doses > 5) $doses --; // récupérer le numéro de DOM correspondant $numdom = $ligne_url [1]; // tant que la dernière ligne lue fait référence à un DOM while ($ligne_url [0] == "0") { // on va réordonner le champ date et supprimer les champs inutiles $ligne_url = selchamps_evol ($ligne_url, $doses); // si on est passé à un autre département d'outre-mer if ($numdom != $domprec) { // récupérer son code $codedom = $liste_codedom [$numdom]; // et mémoriser le numéro de DOM courant $domprec = $numdom; } // mettre en forme la ligne $ligne_url = $codedom.substr ($ligne_url, 2); // recopier la ligne dans le bon fichier fputs ($descscv1, $ligne_url); // lire la ligne suivante de l'url $ligne_url = fgets ($descurl, LG_MAX_CSV); // récupérer le numéro de DOM (si on n'est pas passé aux régions) $numdom = $ligne_url [1]; } // remplissage du fichier des DOM terminé fclose ($descscv1); // on va faire de même pour les régions // tant que non fin de fichier csv while ($ligne_url) { // on va réordonner le champ date et supprimer les champs inutiles $ligne_url = selchamps_evol ($ligne_url, $doses); // récupérer le numéro de la région $numreg = substr ($ligne_url, 0, 2); // si on est passé à une autre région if ($numreg != $regprec) { // récupérer son code switch ($numreg) { case 11: $codereg = "ile"; break; case 24: $codereg = "cen"; break; case 27: $codereg = "bou"; break; case 28: $codereg = "nor"; break; case 32: $codereg = "hau"; break; case 44: $codereg = "gra"; break; case 52: $codereg = "pay"; break; case 53: $codereg = "bre"; break; case 75: $codereg = "nou"; break; case 76: $codereg = "occ"; break; case 84: $codereg = "auv"; break; case 93: $codereg = "pro"; break; case 94: $codereg = "cor"; break; default: $codereg = "???"; } // et mémoriser le numéro de région courant $regprec = $numreg; } // mettre en forme la ligne $ligne_url = $codereg.substr ($ligne_url, 2); // recopier la ligne dans le dernier fichier fputs ($descscv2, $ligne_url); // lire la ligne suivante de l'url $ligne_url = fgets ($descurl, LG_MAX_CSV); } // remplissage du fichier des régions terminé fclose ($descscv2); // on remplace les anciens fichier csv par les nouveaux rename ($nouvcsv1, $chemdom); rename ($nouvcsv2, $chemreg); } // sinon else // message d'erreur si on n'a pas pu créer le fichier $erreur = "Problème pour créer le fichier ".$csvreg." ou ".$csvdom; // terminé avec l'url fclose ($descurl); } // sinon autre message d'erreur else $erreur = "Problème d'accés à l'URL pour mettre à jour les fichiers ".$csvreg." et ".$csvdom; // si pas d'erreur durant cette première partie if (! $erreur) { // 2ème partie : on crée un fichier par région et un fichier par DOM // avec une information tous les 10 jours synthese_regdom ($csvreg, "reg"); synthese_regdom ($csvdom, "dom"); } // sinon else // afficher l'erreur trouvée message ($erreur); } ?>