`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.
**Syntax:**
“`php
proc_open ( string $command , array $descriptorspec , array &$pipes , ?string $cwd = null , ?array $env = null , ?array $other_options = null ) : resource|false
“`
**Parameters:**
– `$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.
**Example:**
“`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
);
$pipes = array();
$process = proc_open(‘ls’, $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], ”);
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($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`.
暂无评论内容