Code source du fichier testmaj-tot-a-fra.php

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

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

        // url du fichier de référence
        $url = SITE_REF.vacsi_tot_a_fra;

        // 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 en oubliant "FR;"
            $ligne_url = substr (fgets ($descurl, LG_MAX_CSV), 3);

            // 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)
            {
                // on va reconstruire le fichier csv local à partir de l'url
                message ("Mise à jour du fichier ".$csv);

                // pour l'instant, son nom est provisoire
                $nouvcsv = DIR_CSV."/vacsi-tot-a-fra.new";

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

                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;

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

                    // on va mémoriser les lignes du fichier de référence
                    // pour les trier par âge croissant
                    $tabligne = array ();

                    // tant que la dernière ligne lue fait référence à une classe d'âge
                    while (substr ($ligne_url, 2, 1) == ";")
                    {
                        // corriger la ligne en supprimant le champ date, la partie
                        // décimale de la population (!) et réordonner les champs
                        $ligne_url = selchamps_jour ($ligne_url, $doses);

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

                        // lire la ligne suivante de l'url en oubliant "FR;"
                        $ligne_url = substr (fgets ($descurl, LG_MAX_CSV), 3);
                    }

                    // trier le tableau par classes d'âge croissantes
                    sort ($tabligne);

                    // compléter le fichier par classes d'âge croissantes
                    foreach ($tabligne as $ligne_csv)
                        fputs ($descscv, $ligne_csv);

                    // traiter comme les autres la ligne tous âges confondus
                    $ligne_url = selchamps_jour ($ligne_url, $doses);

                    // la rajouter
                    fputs ($descscv, $ligne_url);

                    // 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);
    }
?>