PHP command line interaction

I have a specific command line program that takes input from a stream, and not as command line arguments. (For example, a C program that accepts input using scanf.) How can I interact with this application using PHP? exec (), shell_exec () will not help here, because input is not done through command line arguments. I need a constant I / O connection between the PHP script and the command line program, so that the user can give PHP input that PHP will relay to the program, and then get the output that is displayed to the user.

+2
source share
1 answer

You can use proc_openfor this.

Example from this page:

<?php
$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("file", "/tmp/error-output.txt", "a") // stderr is a file to write to
);

$cwd = '/tmp';
$env = array('some_option' => 'aeiou');

$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt

    fwrite($pipes[0], '<?php print_r($_ENV); ?>');
    fclose($pipes[0]);

    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}
?>

Output:

Array
(
    [some_option] => aeiou
    [PWD] => /tmp
    [SHLVL] => 1
    [_] => /usr/local/bin/php
)
command returned 0
+2
source

Source: https://habr.com/ru/post/1617697/


All Articles