Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je travaille sous le Framework Zend 1 et j’aimerais exécuter une fonction d'envoie de mail 30 minutes après avoir effectué un ajout dans une base de données mysql .
NB: je dois envoyer le mail 30 minutes après l'ajout des données pour la simple raison que l'utilisateur dispose de 30 min pour effectuer des modifications sur les données insérés via un formulaire dans la base de données et qui vont être transmises par la suite par mail (fonction de mail)
Merci d'avance.
Hors ligne
Bonjour,
Quel est ton soucis dans ce contexte ? Je ne vois pas trop de problème.
Hors ligne
Il faut simplement utiliser un cron qui s'execute toutes les 30 minutes et envoi les mails pour les lignes pour lesquelles ça n'a pas été fait.
Tu trouveras des tonnes de docs sur l'utilisation de ZF1 dans des cron en ligne.
Hors ligne
Tout d'abord je vous remercie pour vos réponse . je viens de trouver des pistes vers ce que je veux réaliser en se basant sur le concept cronjob Zend:
selon les recherches effectués je dois réaliser un script par exemple 'BootstrapCron.php' de la sorte afin d'appeler les ressources necessaires pour les echanges avec la base de données et les autres librairies:
[lang=php] <?php mb_internal_encoding('utf-8'); mb_regex_encoding('utf-8'); setlocale(LC_ALL, 'fr_FR.utf8'); // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..')); // Define path to library directory defined('LIBRARY_PATH') || define('LIBRARY_PATH', realpath(dirname(__FILE__) . '/../../library')); // Define path to public directory defined('PUBLIC_PATH') || define('PUBLIC_PATH', realpath(dirname(__FILE__) . '/../../public')); define('APPLICATION_ENV','development'); // Ensure library is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(LIBRARY_PATH), realpath(APPLICATION_PATH), realpath(APPLICATION_PATH . '/models'), get_include_path(), ))); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); // custom classes $autoloader->registerNamespace('Util_'); require_once 'Zend/Application.php'; $application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'); $application->bootstrap(); $view = new Zend_View(); $view->setScriptPath(APPLICATION_PATH . '/views/scripts/'); ?> ensuite il faut créer un fichier qui va faire appel au précédent et c'est dans le 2ème fichier que je dois effectuer l'ensomble des traitements: <?php require_once 'BootstrapCron.php'; $tableUser = new Table_User(); $view->user = $tableUser->get(1); $content = $view->render('user/profile.phtml'); ..... ?>
Ma question c'est est ce que je suis dans la bonne voie? et où est ce que je doit placer les 2 fichiers ;est ce sur la répertoire /application ?
Dernière modification par yassinho2015 (08-02-2018 09:47:57)
Hors ligne
Tu es sur la bonne piste : le premier fichier est ton bootstrap, le second est ton cron à proprement parler.
Ton archi en terme de fichiers ressemble à ça :
/application
|- /controllers
|- /models
|- /commands
|- /whatever..
|- /Bootstrap.php
/cron
|- /bootstrap.php (BootstrapCron.php dans ton cas)
|- /scripts
|- /my-first-cron.php
|- /my-second-cron.php
|- /my-third-cron.php
/public
Basé là dessus, ton BootstrapCron devient juste bootstrap.php chez moi (pas de majuscule, c'est du plain php comme index.php, pas une classe.
Les my-first-cron.php et autres sont les scripts. On les appelles avec cron ou en command line avec la commande suivante :
php cron/scripts/my-first-cron.php
Dans le code, tu inclus comme montré plus haut le bootstrap (car on fait un appel direct)
require __DIR__.'/../bootstrap.php';
Puis ton code. Drop le ?> de la fin, il vaut mieux jamais le mettre d'ailleurs
Hors ligne
Votre explication était bien détaillée.Merci pour votre aide.
Hors ligne