Maison >développement back-end >tutoriel php >Comment puis-je obtenir une sortie en temps réel d'un processus PHP ?

Comment puis-je obtenir une sortie en temps réel d'un processus PHP ?

DDD
DDDoriginal
2024-12-23 18:34:14517parcourir

How Can I Get Realtime Output from a PHP Process?

Exécuter un processus avec une sortie en temps réel en PHP

Lors de l'exécution de processus en PHP, il peut être souhaitable d'afficher leur sortie en temps réel. Cet article explore une méthode pour y parvenir à l'aide de la fonction exec() et d'une configuration unique des spécifications du descripteur.

Capture de sortie en temps réel

Pour capturer la sortie d'un processus en temps réel, il est nécessaire de spécifier les spécifications de descripteur suivantes :

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from
    1 => array("pipe", "w"), // stdout is a pipe that the child will write to
    2 => array("pipe", "w") // stderr is a pipe that the child will write to
);

Cette configuration redirige stdin, stdout et stderr aux tuyaux, nous permettant de lire depuis la sortie standard en temps réel à l'aide de la fonction fgets().

Exemple : Ping avec sortie en temps réel

Pour démontrer cette méthode, exécutons la commande ping avec sortie en temps réel :

$cmd = "ping 127.0.0.1";

$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre class="brush:php;toolbar:false">";

if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";

Ce code affichera chaque ligne du processus ping dès qu'elle sera disponible, fournissant une vue en direct du trafic réseau.

Terminaison du processus

Terminer les processus lorsqu'un utilisateur quitte une page Web peut être un défi. Dans le cas de processus de longue durée comme ping, ils peuvent continuer à s'exécuter même après la fermeture de la page.

Pour résoudre ce problème, on peut utiliser les techniques suivantes :

  • Utilisez proc_terminate() pour tuer explicitement le processus lorsque le script se termine.
  • Utilisez pcntl_signal() pour piéger l'utilisateur qui quitte la page et tuer le processus en conséquence.
  • Définissez un délai d'attente pour le processus et terminez-le automatiquement après une période spécifiée.

En implémentant ces méthodes, les développeurs peuvent garantir que les processus démarrés à partir de leurs scripts PHP sont correctement gérés. lorsqu'un utilisateur quitte la page.

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