Maintenir l'exécution de PHP active après la réponse HTTP
Dans les environnements où PHP s'exécute en tant que mod_php d'Apache, un défi courant se pose dans le maintien de l'exécution de PHP après envoyer une réponse HTTP au client. Cette contrainte provient de la nécessité de signaler les messages d'erreur à une application dans un délai d'attente précis.
Pour résoudre ce problème, la clé réside dans l'envoi de la réponse HTTP le plus tôt possible sans interrompre les opérations en cours. Une méthode efficace consiste à utiliser l'extrait de code suivant :
ob_end_clean(); header("Connection: close"); ignore_user_abort(); // optional ob_start(); echo ('Text the user will see'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); session_write_close(); // Added per suggestion // Do processing here sleep(30); echo('Text user will never see');
Cet extrait vide initialement toute sortie en attente et configure la connexion HTTP pour qu'elle se ferme. En ignorant les tentatives d'abandon initiées par l'utilisateur et en spécifiant la longueur du contenu, la réponse HTTP est efficacement distribuée. Par la suite, des traitements en cours peuvent être exécutés, tels que des opérations de base de données ou l'envoi d'e-mails.
En employant cette méthode, PHP peut envoyer une réponse HTTP complète au client et poursuivre l'exécution pendant une période de temps spécifiée, résolvant ainsi efficacement le problème. des limitations de rapport d'erreurs imposées par les applications externes. Cette approche est particulièrement utile dans les scénarios où des opérations fastidieuses doivent être effectuées sans dépasser les délais d'attente prédéterminés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!