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 :
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!