Maison >développement back-end >tutoriel php >Comment exécuter et terminer des processus PHP en temps réel ?

Comment exécuter et terminer des processus PHP en temps réel ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 08:26:11663parcourir

How to Execute and Terminate Realtime PHP Processes?

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!

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