Maison >développement back-end >tutoriel php >Comment puis-je exécuter et gérer des processus avec une sortie en temps réel en PHP ?

Comment puis-je exécuter et gérer des processus avec une sortie en temps réel en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-24 09:44:19112parcourir

How Can I Run and Manage Processes with Real-time Output in PHP?

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

L'exécution de processus sur des pages Web qui fournissent une sortie en temps réel peut être une fonctionnalité précieuse. Par exemple, l'exécution du processus « ping » et la capture de son résultat ligne par ligne peuvent améliorer l'expérience utilisateur. Pour y parvenir en PHP, envisagez l'approche suivante :

Pour exécuter un processus avec une sortie en temps réel, vous pouvez utiliser proc_open(). Voici un exemple :

$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());
echo "<pre class="brush:php;toolbar:false">";
if (is_resource($process)) {
    while ($s = fgets($pipes[1])) {
        print $s;
        flush();
    }
}
echo "
";

Dans cet exemple, proc_open() est utilisé pour exécuter la commande 'ping 127.0.0.1' et capturer sa sortie en temps réel. Le tableau descriptorspec définit les descripteurs de fichiers pour le processus. Plus précisément, il définit stdin comme un tube à partir duquel le processus enfant peut lire, stdout comme un tube dans lequel le processus enfant peut écrire et stderr comme un tube dans lequel le processus enfant peut écrire.

flush() est utilisé pour garantir que toute sortie du processus enfant est affichée immédiatement. is_resource($process) vérifie si le processus enfant est toujours en cours d'exécution. La boucle while lit en permanence la sortie du tube stdout du processus enfant et l'imprime sur la page Web, vous permettant de voir les résultats du ping en temps réel.

Tuer les processus en cours

Pour tuer le processus enfant lorsqu'un utilisateur quitte la page, vous pouvez utiliser proc_terminate(). Pour le processus « ping », vous pouvez utiliser le code suivant :

proc_terminate($process);
?>

Cela mettra fin au processus ping et l'empêchera de continuer à s'exécuter.

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