Are there any alternative approaches to executing shell commands and reading their output in PHP?

When executing shell commands in PHP using functions like `exec()` or `shell_exec()`, there are potential security risks if not handled properly. An alternative approach is to use the `proc_open()` function, which provides more control over the process and its input/output streams.

// Example of using proc_open to execute a shell command and read its output

$command = 'ls -l';

$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("pipe", "w")   // stderr is a pipe that the child will write to
);

$process = proc_open($command, $descriptorspec, $pipes);

if (is_resource($process)) {
    // Read the output from the command
    echo stream_get_contents($pipes[1]);

    // Close the pipes
    fclose($pipes[0]);
    fclose($pipes[1]);
    fclose($pipes[2]);

    // Close the process
    proc_close($process);
}