`proc_open` is a function in PHP that allows you to execute a command and open file pointers for input/output. It runs a command and returns a resource that can be used to control the process.


proc_open ( string $command , array $descriptorspec , array &$pipes , ?string $cwd = null , ?array $env = null , ?array $other_options = null ) : resource|false


– `$command`: The command to be executed.
– `$descriptorspec`: An indexed array where the key represents the descriptor number and the value represents how PHP will pass that descriptor to the child process.
– `$pipes`: Will be set to an indexed array of file pointers that correspond to PHP’s end of any pipes that are created.
– `$cwd`: The initial working directory for the command.
– `$env`: An associative array with the environment variables for the command.
– `$other_options`: Allows to specify additional options, like suppress_errors or binary_pipes.

This function is quite advanced and should be used with care. Incorrect usage can lead to security issues or bugs.


$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

$pipes = array();

$process = proc_open(‘ls’, $descriptorspec, $pipes);

if (is_resource($process)) {
fwrite($pipes[0], ”);

echo stream_get_contents($pipes[1]);

$return_value = proc_close($process);

echo “Command returned $return_value\n”;
In this example, `ls` command is executed, the output is written to stdout (which we have as a pipe) and it’s read back into PHP with `stream_get_contents()`. If there were any errors, they would be appended to `/tmp/error-output.txt`.

© 版权声明
评论 抢沙发