Comment puis-je faire en sorte que PHP 5.2 (exécuté en tant que apache mod_php) envoie une réponse HTTP complète au client, puis continue à exécuter des opérations pendant une minute supplémentaire ?
La longue histoire :
J'ai un script PHP qui doit exécuter quelques longues requêtes de base de données et envoyer des e-mails, ce qui prend 45 à 60 secondes pour s'exécuter. Ce script est appelé par une application sur laquelle je n'ai aucun contrôle. J'ai besoin que l'application signale tout message d'erreur reçu du script PHP (principalement des erreurs de paramètres invalides).
L'application a un délai d'attente inférieur à 45 secondes (je ne connais pas la valeur exacte) et enregistre donc chaque exécution du script de PHP comme une erreur. Par conséquent, j'ai besoin que PHP envoie la réponse HTTP complète au client aussi rapidement que possible (idéalement, dès que les paramètres d'entrée ont été validés), puis qu'il exécute le traitement de la base de données et des e-mails.
J'utilise mod_php, donc pcntl_fork
n'est pas disponible. Je pourrais contourner ce problème en sauvegardant les données à traiter dans la base de données et en exécutant le processus réel à partir de l'application cron
mais je cherche une solution plus courte.
5 votes
Désolé, mais cela ressemble à une mauvaise utilisation du langage PHP.
3 votes
Ce n'est pas tant une mauvaise utilisation du langage PHP qu'une mauvaise utilisation d'un processus de serveur web. Si aucun HTTP / web n'est impliqué, aucun serveur web ne devrait s'en occuper.
83 votes
Abus du système ou non, nous devons parfois faire des choses que nous n'aimons pas en raison d'exigences qui échappent à notre contrôle. Cela ne rend pas la question invalide, mais la situation est malheureuse.
15 votes
Je ne vois pas en quoi c'est un abus, du tout. Si c'est le cas, quelqu'un devrait dire à Amazon de fermer amazon.com, puisque la plupart des tâches liées à l'emballage et à l'expédition d'une commande ont lieu après que la demande d'achat sur le Web a été effectuée. Soit cela, soit fixer un délai de deux semaines pour les demandes d'achat sur amazon.com et ne fournir la réponse au navigateur qu'une fois la commande livrée au client.
2 votes
Cette solution fonctionne-t-elle ? stackoverflow.com/questions/265073/php-background-processes/ ?
27 votes
Essayons de garder nos opinions personnelles pour nous. répondez à la question ou allez ailleurs, s'il vous plaît.