PHP Communication interprocessus


Exemple

La communication interprocessus permet aux programmeurs de communiquer entre différents processus. Par exemple, considérons que nous devons écrire une application PHP capable d'exécuter les commandes bash et d'imprimer la sortie. Nous utiliserons proc_open , qui exécutera la commande et renverra une ressource avec laquelle nous pouvons communiquer. Le code suivant montre une implémentation de base qui exécute pwd dans bash partir de php

<?php
    $descriptor = array(
        0 => array("pipe", "r"), // pipe for stdin of child
        1 => array("pipe", "w"), // pipe for stdout of child
    );
    $process = proc_open("bash", $descriptor, $pipes);
    if (is_resource($process)) {
        fwrite($pipes[0], "pwd" . "\n");
        fclose($pipes[0]);
        echo stream_get_contents($pipes[1]);
        fclose($pipes[1]);
        $return_value = proc_close($process);

    }
?>

proc_open exécute la commande bash avec $descriptor tant que spécifications de descripteur. Après cela, nous utilisons is_resource pour valider le processus. Une fois cela fait, nous pouvons commencer à interagir avec le processus fils en utilisant $ pipes qui est généré selon les spécifications du descripteur.

Après cela, nous pouvons simplement utiliser fwrite pour écrire dans stdin du processus enfant. Dans ce cas, pwd suivi du retour chariot. Enfin, stream_get_contents est utilisé pour lire stdout du processus enfant.

Rappelez-vous toujours de fermer le processus enfant en utilisant proc_close () qui mettra fin à l'enfant et renverra le code de statut de sortie.