Retour : Page Principale > sommaire applications botanique > Appli Référentiel

Référentiel - Solution portable pour exécuter un script PHP CLI


Contexte
Nous souhaitons exécuter un script PHP dont la durée d'exécution peut dépasser 30s.
Ce script doit donc ĂȘtre lancer en ligne de commande et exĂ©cuter par PHP CLI.
Le lancement de ce script doit ĂȘtre dĂ©clenchĂ© par un utilisateur depuis une interface web.
Ce script PHP n'utilise pas de commandes systĂšmes, seulement les fonctions PHP.

Deux cas se présentent :

Safe mode ON
Si l'on souhaite contourner le problÚme dans notre cas (pas de commandes systÚmes à exécuter) :
  1. utiliser la balise html meta refresh
  2. utiliser un cron

Solution 1 : l'utilisateur doit garde la page en question ouverte, le navigateur doit supporter la balise... en bref, c'est risqué.
Solution 2 : la plupart des hébergements mutualisés offre des possibilités de faire un cron ou il existe des solutions alternatives.
Nous retiendrons la solution 2.

Safe mode OFF
Cela devrait ĂȘtre forcĂ©ment le cas dans les versions de PHP supĂ©rieure Ă  5.3 car il devrait ĂȘtre supprimĂ©.
Dans ce cas lĂ , la page web peut lancer directement le script PHP CLI.

Algorithme
Page web de lancement d'un traitement :
  • Formulaire permettant de demander un nouveau traitement (job)
  • Stockage dans une base de donnĂ©es du nouveau job Ă  exĂ©cuter.
  • Test existence/activation du safe_mode :
    • Safe monde ON : configuration prĂ©alable d'un cron, attente du lancement du script via le cron
    • Safe monde OFF ou supprimĂ© (PHP > 5.3) : lancement du script via la fonction exec('php -f /chemin/vers/mon/dossier/mon_script.php');
Script shell :
  • Recherche dans la base de donnĂ©es du job le plus ancien non traitĂ©
  • Modification de l'enregistrement du job pour indiquer sa prise en compte et le dĂ©but du traitement
  • Lancement du traitement
  • Écriture dans la base de donnĂ©es des logs ou des rĂ©sultats du script au fur et Ă  mesure du traitement
  • Modification de l'enregistrement du job pour indiquer la fin du traitement
Page web de consultation de l'avancement d'un traitement :
  • Via Javascript AJAX, il est possible de faire appele Ă  un service web qui retourne l'Ă©tat d'avancement du traitement.
    • script Js fait appel au service web en passant l'id du job
    • service web regarde l'Ă©tat d'avancement du job et retourne l'info
    • script Js affiche l'Ă©tat du job