Code source du fichier testmaj-tot-reg.php

<?php
    /*
       Vérifie si le fichier local vacsi-tot-reg.csv est à jour
       Si nécessaire, le reconstruit à partir du fichier de référence sur internet
    */

    function testmaj_tot_reg ()
    {
        // fichier csv à mettre à jour éventuellement
        $csv = "vacsi-tot-reg.csv";

        // url du fichier de référence
        $url = SITE_REF.vacsi_tot_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);

            // lire la 2ème 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);

            // mémoriser la date
            $date_url = $args [1];

            // fichier local contenant la version précédente de l'url
            $chemcsv = DIR_CSV."/".$csv;

            // ouvrir ce fichier en lecture
            $descscv = fopen ($chemcsv, "r");

            // si l'ouverture s'est bien passée
            if ($descscv)
            {
                // récupérer la date présente dans le fichier local
                $date_csv = trim (fgets ($descscv, 20));

                // déjà terminé avec ce fichier
                fclose ($descscv);
            }

            // si ces dates sont différentes
            if ($date_url != $date_csv)
            {
                // une mise à jour du fichier csv local est nécessaire
                message ("Mise à jour du fichier ".$csv);

                // tant que la ligne lue concerne un DOM (s'il y en a dans le fichier)
                while ($ligne_url [0] == "0")
                    // passer à la ligne suivante
                    $ligne_url = fgets ($descurl, LG_MAX_CSV);

                // on va mémoriser les lignes du fichier de référence dans un
                // tableau pour trier les régions par ordre alphabétique des noms
                $tabligne_reg = array ();

                // trouver le nombre de doses mémorisées
                $doses = (count ($args) - 3) / 2;

                // 2 colonnes seront à fusionner pour la dose 5
                // à présent elle y est toujours, mais le test est explicatif
                if ($doses > 5)
                    $doses --;

                // tantque non fin du fichier de référence
                while ($ligne_url)
                {
                    // les numéros de région ne sont pas contigus utilisation
                    // d'un switch - case pour mettre leur nom à la place
                    switch (substr ($ligne_url, 0, 2))
                    {
                        case 84: $nom_reg = "Auvergne-Rhône-Alpes";
                                 break;

                        case 27: $nom_reg = "Bourgogne-Franche-Comté";
                                 break;

                        case 53: $nom_reg = "Bretagne";
                                 break;

                        case 24: $nom_reg = "Centre-Val de Loire";
                                 break;

                        case 94: $nom_reg = "Corse";
                                 break;

                        case 44: $nom_reg = "Grand Est";
                                 break;

                        case 32: $nom_reg = "Hauts-de-France";
                                 break;

                        case 11: $nom_reg = "Ile-de-France";
                                 break;

                        case 28: $nom_reg = "Normandie";
                                 break;

                        case 75: $nom_reg = "Nouvelle-Aquitaine";
                                 break;

                        case 76: $nom_reg = "Occitanie";
                                 break;

                        case 52: $nom_reg = "Pays de la Loire";
                                 break;

                        case 93: $nom_reg = "Provence-Alpes-Côte d’Azur";
                                 break;

                        // le cas par défaut ne devrait jamais se produire
                        default: $nom_reg = "code ".$args [0];
                    }

                    // fabriquer la ligne qui sera mémorisée dans le fichier
                    $ligne_url = $nom_reg.substr (selchamps_jour ($ligne_url, $doses), 2);

                    // la mémoriser
                    array_push ($tabligne_reg, $ligne_url);

                    // lire la ligne suivante de l'url
                    $ligne_url = fgets ($descurl, LG_MAX_CSV);
                }

                // tri du tableau par ordre alphabétique des noms
                sort ($tabligne_reg);

                // création du fichier csv local
                // pour l'instant, le nom est provisoire
                $nouvcsv = DIR_CSV."/vacsi-tot-reg.new";

                // ouvrir ce fichier en écriture
                $descscv = fopen ($nouvcsv, "w");

                // si l'ouverture s'est bien passée
                if ($descscv)
                {
                    // recopier la date dans la première ligne
                    fputs ($descscv, $date_url."\n");

                    // trouver le nombre de doses mémorisées
                    $doses = (count ($args) - 3) / 2;

                    // compléter avec les informations des différentes régions
                    for ($i = 0; $i < count ($tabligne_reg); $i++)
                        fputs ($descscv, $tabligne_reg [$i]);

                    // remplissage fichier terminé
                    fclose ($descscv);

                    // on remplace l'ancien fichier par le nouveau
                    rename ($nouvcsv, $chemcsv);
                }
                // sinon
                else
                    // message d'erreur si on n'a pas pu créer le fichier
                    message ("Problème pour créer le fichier ".$csv);
            }
            // sinon
            else
                // aucune mise à jour nécessaire
                message ("Fichier ".$csv." déjà à jour");

            // terminé avec l'url
            fclose ($descurl);
        }
        // sinon
        else
            message ("Problème d'accés à l'URL pour mettre à jour le fichier ".$csv);
    }
?>