Maison >développement back-end >tutoriel php >Comment puis-je effectuer un traitement PHP en arrière-plan après avoir envoyé une réponse immédiate ?

Comment puis-je effectuer un traitement PHP en arrière-plan après avoir envoyé une réponse immédiate ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-12 14:17:11651parcourir

How Can I Perform Background PHP Processing After Sending an Immediate Response?

Gestion du traitement PHP après l'envoi de la réponse

Lors de la réception de requêtes d'un serveur avec des ID de message et du texte, les scripts doivent souvent traiter les informations et générer une réponse. Cependant, l'envoi immédiat de la réponse peut marquer le message du serveur comme livré, empêchant ainsi son traitement ultérieur. Cela peut poser un problème pour les applications qui nécessitent une génération de réponse immédiate mais des opérations backend continues.

Solution : traitement différé avec mise en mémoire tampon de sortie

Pour résoudre ce problème, une technique connue car la mise en mémoire tampon de sortie peut être utilisée. Cette approche implique les étapes suivantes :

  1. Activer l'exécution différée :

    • Appelez ignore_user_abort(true) pour empêcher les actions de l'utilisateur d'interrompre le script.
    • Définissez set_time_limit(0) pour supprimer à tout moment contraintes.
  2. Sortie de réponse tampon :

    • Utilisez ob_start() pour commencer à mettre en mémoire tampon la sortie de réponse.
  3. Envoyer une partie Réponse :

    • Traitez les données nécessaires et générez la réponse initiale, puis faites-y écho en utilisant echo $response.
  4. En-têtes de sortie Flush :

    • Envoyer ce qui suit headers :

      • Connexion : proche pour indiquer que la connexion se fermera après l'envoi de la réponse.
      • Content-Length : .ob_get_length()` pour spécifier la longueur de la sortie mise en mémoire tampon.
  5. Réponse complète Transmission :

    • Appelez ob_end_flush() et @ob_flush() pour vider la sortie mise en mémoire tampon.
    • Appelez flush() pour envoyer la sortie restante au navigateur.
    • Pour PHP-FPM (PHP > 5.3.3), appelez fastcgi_finish_request() pour terminer le demande.
  6. Continuer le traitement :

    • Le script peut désormais continuer le traitement pendant que la réponse est transmise au navigateur .

Supplémentaire Considérations :

  • Pour garantir l'achèvement de l'exécution, utilisez die() pour terminer explicitement le script, en particulier lorsque set_time_limit=0 est utilisé.
  • Cette technique permet au script de s'exécuter dans l'arrière-plan, ce qui peut consommer des ressources du serveur.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn