PHP : Faire un évènement une fois par mois

Résolu
Bonjour à tous,

mon programme me permet actuellement d'enregistrer dans une BDD des données provenant de flux RSS, tout marche bien, j'ai trouvé comment faire, je souhaiterais juste que cette action s'effectue, par exemple, une fois par mois. Pour le moment, j'ai une page php sur laquelle il faut se rendre pour actualiser.

Est-ce que je dois récupérer la date et utiliser cette variable ou avez-vous une autre solution ?

Merci par avance

8 réponses

  1. Bonjour,

    un batch?

    un petit .bat ou .cmd qui lance ta page en tache planifiée tous les mois?
    0
    1. Euh ... je ne connais pas trop ça.

      Comment je peux faire ça ?
      0
      1. et bien je vais te donner un exemple.

        si tu as php installé via wamp sur du windows.

        donc tu crée un fichier .bat ou tu écrit:

        echo off
        C:\wamp\bin\php\php5.3.5\php.exe "C:\wamp\www\test\test.php"
        


        lorsque tu vas double cliquer sur ce fichier de commande ca va executer ta page php test.php

        ensuite tu crée une tache planifiée qui lance ce fichier une fois par mois.

        voila ^^
        0
        1. AH ok je comprends, le problème c'est que j'aurais voulu intégrer cette actualisation à l'application, parce que si j'ai bien compris, tous les gens qui vont utiliser mon appli PHP doivent créer une tache planifiée et ça c'est pas trop ce que je recherche.

          Je pense que je vais récup le jour avec la fonction date et avec des des test je pense que je pourrais m'en sortir.$

          Merci quand même !
          0
          1. je sais pas trop si c'est moi qui ai pas tout bien compris mais meme si tu récupère avec la fonction date et tout et tout comment tu vas regarder en permanence si on a changé de mois??

            qu'est ce qui va faire que tu vas passer dans tes test sur la date et tout?

            0
            1. sinon, peut être que ton hébergeur prend en charge les crons ?

              http://doc.ubuntu-fr.org/cron

              sinon, tu peux faire une page PHP qui va lire en BDD pour savoir si l'action a été effectuée ce mois ci, sinon l'effectuer et le noter en BDD :)
              0
              1. pour l'instant il n'y a pas d'hébergeur.

                Sinon ton autre solution m'intéresse, comment faire pour aller voir en BDD si l'action a été effectué ce mois-ci ?

                Merci
                0
                1. tu récupère le mois et l'année avec la fonction date(), tu vérifie si la valeur obtenue est dans la BDD, si oui, tu ne fais rien, sinon, tu effectue ta tache, puis tu marque la valeur de la date dans la BDD
                  0
                2. Je comprend ton raisonnement mais je ne vois pas comment récupérer la date de l'insertion de données dans la BDD ??
                  0
                3. je cause pas très bien BDD, mais jette un oeil ici :

                  http://www.infos-du-net.com/forum/277626-21-aller-chercher-valeur-base-donnees-comparer
                  0
                4. ah non mais récupérer une info de la BDD et l'exploiter là il y a pas de soucis, ça je le fais déjà. Sauf que toi tu me parles d'une page qui va voir si l'action a été enregistrée ce mois-ci , mais j'ai pas l'impression que la date d'insertion dans la bdd soit conservée.
                  0
                5. non, tu insert ta propre variable de date dans ta BDD

                  tu génère le mois et l'année dans une variable
                  tu compare ta variable aux entrées de la BDD
                  si l'entrée existe, tu ne fais rien
                  si elle n'existe pas, tu lance ton script et tu marque ta variable date dans la BDD
                  0
              2.     // Le principe est de stocker le mois/ la semaine ou le jour où le traitement a été lancé;
                    $test = mysql_query("select valeur from table_compteur where type='traitement' limit 1" ); // Ici j'utilise une table fictive
                    if(mysql_num_rows($test)>0) {
                        $mois = mysql_fetch_array($test); // Je récupère les infos de ma table
                        if($mois['valeur']==date("m" )){ // Si la valeur stockée est égale au mois en cours...
                            // ça veut dire que le traitement a déjà été fait, donc je ne fais rien.
                        }
                        else{ // Sinon, c'est que le mois en cours est passé !
                            // Je peux donc effectuer mon traitement à la suite
                            // [...]
                            // IMPORTANT ! Il ne faut pas oublier de mettre à jour la valeur dans la table pour éviter que le traitement soit effectué plusieurs fois.
                            mysql_query("update table_compteur set valeur='".date("m" )."' where type='traitement' " );
                            // Hé voilà!
                        }
                    }
                    else {// Si l'entrée n'existe pas dans la table, je la créée en y insérant le mois en cours;
                        mysql_query("insert into table_compteur (type,valeur) values ('traitement','')" ); // Je donne une valeur vide pour que le traitement se lance lorsque le script sera rappelé.
                    }
                


                Voilà ce que j'ai fait du coup et ça marche pas mal
                0