Exécuter un script PHP en arrière plan

Fermé
wow06 Messages postés 72 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 21 janvier 2017 - 20 mai 2015 à 18:19
wow06 Messages postés 72 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 21 janvier 2017 - 20 mai 2015 à 20:45
Bonjour,

Voila la situation : j'ai un formulaire que mes visiteurs valident en appuyer sur un bouton "lancer". Je souhaite lancer un script PHP en arrière plan et dans le même temps envoyer mes visiteurs sur une autre page.

Quel est le meilleur moyen pour faire cela ?

Merci à vous.
A voir également:

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 20/05/2015 à 18:34
'lut, tu peux lancer des scripts depuis une page PHP avec la fonction exec par exemple.
EDIT: en fait exec est synchrone, il faut autre chose; c.f. ce guide.
Mais il faut savoir trois choses:
  • le script PHP de ta page doit avoir fini son traitement dans les 30 secondes qui suivent la requête du formulaire, sinon Apache tue le processus de PHP et renvoie une erreur 500 au client
  • le script lancé n'est pas supervisé ni ne partage l'environnement d'Apache: tu n'auras donc pas accès aux variables
    $_POST, $_GET, $_SERVER, $_COOKIE
    , et tout le reste, à moins que tu ne passes leur contenu au script.
  • attention aux paramètres de lancement du script si ils dépendent de l'entrée utilisateur: de manière analogue aux injections SQL, si tu ne protège pas tes entrées, de mauvaises choses peuvent se passer.

Le dernier détail qui aide: si tu veux passer des paramètres/commandes au script et que ton hébergeur utilise Linux, tu peux communiquer des données en utilisant des tuyaux POSIX (créés avec posix_mkfifo et lus/écrits comme des fichiers normaux).
from human import idiocy
del idiocy
0
wow06 Messages postés 72 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 21 janvier 2017 2
20 mai 2015 à 18:32
Merci pour ta réponse.

Le script que je veux lancer en arrière plan est assez lourd et a besoin de plusieurs minutes de traitement. L'Ajax ne pourrait pas faire l'affaire ?

Mais comment rediriger le visiteur vers une page et lancer un script PHP en même temps ?
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > wow06 Messages postés 72 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 21 janvier 2017
20 mai 2015 à 18:39
L'idée est que la page post-formulaire ne fasse que lancer le script, et se termine immédiatement en redirigeant l'utilisateur vers une page d'attente avec un paramètre: le numéro d'ID du traitement en cours. Cette page d'attente, via AJAX demanderait a une autre page PHP l'avancement du traitement dont on a l'ID; avancement qu'elle récupérera en demandant au script via le tuyau créé.
Mais je n'ai pas d'exemple a te donner directement, faute de code et de connaissance des fonctions de manipulation de processus de PHP. J'ai réagi un peu tard, mais en fait exec attend la fin du script, ce n'est pas bon.
0
wow06 Messages postés 72 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 21 janvier 2017 2
20 mai 2015 à 20:45
Okay je vais voir de ce côté là, merci.
Si d'autres ont des solutions, je reste preneur.
0