IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

CodeIgniter PHP Discussion :

Envoi de mail automatique à la fin d'une enchère


Sujet :

CodeIgniter PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Envoi de mail automatique à la fin d'une enchère
    Bonjour,

    Actuellement je développe un site d'enchère et je bloque sur l'envoi de mail automatique à la fin de l'enchère.

    Pour chaque enchère, j'ai dans ma base de données une date / heure de fin de l'enchère.

    Comment puis-je, en PHP, envoyer un mail automatiquement (sans actions humaine) quand le temps de l'enchère est écoulé ?

    Il y a bien les tâches CRON qui permettraient de lancer un script toutes les 5/10min et de vérifier quelles sont les enchères terminées et envoyer un mail, mais est-ce une bonne solution ?

    J'attends vos réponses/propositions avec impatience.

    D'avance merci.


    Cartmanez64

  2. #2
    Membre régulier Avatar de sebest777
    Inscrit en
    Septembre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 16
    Points : 97
    Points
    97
    Par défaut
    Oui je pense que la tache Cron est une solution très viable.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Malheureusement je ne vois aucun autre moyen.

    Si quelqu'un à d'autres idées n'hésitez pas

  4. #4
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Salut Cartmanez64,


    Non cron n'est absolumment pas une bonne solution car 2 points :
    -Granularité de temps limité à la minute (perte de précision)
    -Consommation de fragment de ressources CPU et RAM pour l'invocation du script alors qu'il n'y a pas de fin d'enchére effective à l'instant T d'invocation


    La meilleur solution est de passer soit par la commande "at" de linux qui permet d'executer en 1 fois à un instant T futur une commande (donc au début de l'enchére il faut ajouter une régle at <durée_enchére> <commande>) cependant on notera au passage que la granularité de temps de AT est également la minute donc on perd en précision, ou sinon il y a la commande "sleep" qui permet une granularité proche des millisecondes et donc de déclencher précisément en heures minutes et secondes voulu le script de gestion de fin d'enchére.

    PS : Ne pas oublier d'envoyer en "background" de la commande shell_exec via le "&" le sleep OU at, aussinon la page risque de rester bloquer tout le long de l'enchére...


    Jespére avoir répondu à ta question,

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse Ethan.

    Avec cette solution il faut lancer la commande pour chaque enchère si j'ai bien compris. Or le but est de rendre la tâche automatique. De plus, la date de fin d'une enchère peut changé.

    Exemple :

    Au moment de la création de l'enchère la date de fin est 27.05.2015 à 11h55

    Si un membre enchéris alors qu'il reste moins de 5min (reste 1min 30sec), le temps restant de l'enchère est remis à 5min.

    Donc si vous avez d'autres idées n'hésitez surtout pas.

  6. #6
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Je ne vois pas ou est le probléme Cartmanez64,

    le lancement de la commande est automatique (appelé lors de la création de l'enchére avec passation de en parametre du script invoqué de l'id de l'enchere et pourquoi pas de la date de fin prevue), pour le fait qu'il y est un potientiel changement de date de fin possible, il suffit simplement que le script PHP invoqué lors de la fin de l'enchére initiale contrôle dans la base de donnée la date effective de fin de l'enchére, si elle différe avec la date prévu alors il relance une commande "at" avec la nouvelle date et se kill, aussinon il continu son exécution.

    Ce processus est déjà moin couteux en terme de performance que d'utiliser CRON toute les N minutes.

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    D'abord merci de t'intéresser à mon problème et de prendre le temps de répondre.

    Effectivement la commande at semble être une bonne solution. Mais je ne voit pas comment l'utiliser dans un script PHP et j'ai quelques questions.

    Puis-je spécifier la date dans le format jj/mm/aaaa hh:mm ?
    Comment récupérer la date depuis la commande dans le script PHP pour la comparaison avec la date de la bdd ?
    Est-il possible de passer des paramètres au script via la commande at (comme l'id de l'enchère et l'id du membre...) ?
    Comment récupérer l'id de la commande at pour là kill ensuite ?

    Pourrais-tu m'éclairer sur ces points et (si tu as du temps) me donner un exemple concret ?

    Merci d'avance pour ton aide.

  8. #8
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Voici un exemple d'utilisation :

    Lors de la creation de l'enchére il suffit d'executer un code de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $tsfin= calcul_date_fin_enchere();
     
    $id_enchere=create_enchere(....);
    $id_member = getMemberId(....);
     
    //Formatage textuelle de la date $tsfin sous la forme h:m j/m/A
    $datefin = date("h:m  d/m/Y",$tsfin);
     
    //Ajout de la planification de lancement du script de gestion de la fin d'enchere (on passe des parametres au script gestionFinEnchere.php dont la date de fin prévue ($tsfin)
    shell_exec(" echo \"/usr/bin/php  /chemin/script/gestionFinEnchere.php {$id_enchere} {$id_member} {$tsfin} \" | at {$datefin}");
    Puis dans gestionFinEnchere.php:

    Il n'y a pas besoin de récupérer un quelqu'onque id de la commande at, car une fois "gestionFinEnchere.php" invoqué avec les paramétres et le controle sur la date de fin d'enchére effectué, si l'ultimatum a été repoussé alors il n'y a qu'a reexecuter un "shell_exec()" avec report des paramétres et la nouvelle date et quitter le script, ou sinon si c'est l'utimatum procédé à l'envois des emails a partir des paramétres reçut.

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci Ethan pour cette réponse.

    J'ai encore juste une question.

    J'utilise le framework php CodeIgniter et je voulais savoir si c'est possible d'utiliser une URL à la place du chemin du fichier absolut dans la fonction "shell_exec(...)" ?

    En effet mon script de la gestion de fin d'enchère se trouve dans la méthode "finEnchere" de la classe "GestionVente". Donc j'accède à cette méthode comme ceci : http://domaine.tld/GestionVente/finEnchere
    Est-il possible d'appeler une URL à la place d'un fichier ?

    D'avance merci pour ta réponse.

  10. #10
    Membre actif Avatar de Ethan 0x21
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2006
    Messages : 120
    Points : 261
    Points
    261
    Par défaut
    Je ne sais pas si tu as déjà trouvé depuis au vu du retard de ma réponse... , auquel cas sa servira à ceux qui se posent la question.
    Il est plutot conseillé dans ce cas si (execution d'une routine de codeigniter) de passer par PHP Cli en invoquant ton script de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    shell_exec("/usr/bin/php <chemin_local_vers_racine_codeigniter>/index.php GestionVente finEnchere <tes_parametres>");

    En effet codeigniter supporte nativement d'être invoqué en local par le biais du php cli (source : https://ellislab.com/codeigniter/use...neral/cli.html )

Discussions similaires

  1. Envoie mail automatique en fonction d'une date
    Par ju3979 dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 29/06/2009, 15h07
  2. Envoie de mail automatique depuis une page ASP
    Par ravidat dans le forum ASP
    Réponses: 3
    Dernier message: 30/05/2009, 14h25
  3. Envoi e-mail automatiquement à une date precise
    Par sooprano dans le forum Langage
    Réponses: 10
    Dernier message: 23/11/2008, 22h03
  4. [DDE]envoi de mail automatique selon le résultat d'une requête
    Par celiaaa dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 10/04/2007, 20h10
  5. Réponses: 14
    Dernier message: 17/11/2005, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo