Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP interaction with command line program

Tags:

php

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

like image 809
Akshay Kashyap Avatar asked Mar 01 '26 03:03

Akshay Kashyap


1 Answers

You can use proc_open for this.

Example from that 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
like image 152
Dogbert Avatar answered Mar 04 '26 18:03

Dogbert



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!