Maison >développement back-end >tutoriel php >Comment exécuter et terminer des processus PHP en temps réel ?
Exécution et terminaison de processus en temps réel en PHP
Cette question explore comment exécuter un processus sur une page Web et recevoir sa sortie en temps réel , éliminant ainsi le besoin d'attendre la fin du processus. La deuxième partie de la question porte sur la façon de mettre fin à de tels processus lorsqu'un utilisateur quitte la page.
Une méthode pour exécuter des processus en PHP et diffuser leur sortie consiste à utiliser la fonction proc_open(). Cette fonction permet de créer un processus enfant pouvant s'exécuter indépendamment du processus PHP parent. Pour faciliter la sortie en temps réel, vous pouvez spécifier le paramètre $descriptorspec avec les descripteurs de fichiers appropriés pour capturer les flux stdout et stderr du processus.
$cmd = "ping 127.0.0.1"; $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 ); flush(); $process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
Une fois le processus enfant créé, vous pouvez utiliser une boucle pour continuellement lisez à partir du tube stdout et imprimez la sortie.
echo "<pre class="brush:php;toolbar:false">"; if (is_resource($process)) { while ($s = fgets($pipes[1])) { print $s; flush(); } } echo "";
Pour terminer le processus enfant lorsque l'utilisateur quitte la page, vous pouvez utiliser un arrêt PHP fonction. Les fonctions d'arrêt sont exécutées à la fin du script PHP, ce qui peut se produire lorsqu'un utilisateur ferme un onglet du navigateur ou quitte la page. Dans la fonction d'arrêt, vous pouvez appeler proc_close() sur le handle du processus enfant pour le terminer.
register_shutdown_function(function() { proc_close($process); });
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!