php从命令行执行时可以使用 r参数来传递执行的php代码,如果我们从程序中传php脚本来执行就会涉及到引号替换的问题,下面记录一个从输入流传递执行的php代码的方法$descriptorspec ...
php从命令行执行时可以使用 -r参数来传递执行的php代码,如果我们从程序中传php脚本来执行就会涉及到引号替换的问题,下面记录一个从输入流传递执行的php代码的方法
$descriptorspec = [
0 => ["pipe", "r"], // 启动的命令行可以从这里读取内容
1 => ["pipe", "w"], // 启动的命令行会把内容输出到这里
2 => ['pipe', 'w'] //启动的命令行会把错误信息输出到这里
];
//启动命令行处理程序
$process = proc_open('php -a ', $descriptorspec, $pipes);
// 把内容客情入标准输入管道使用命令行中可以读取
$inputScript='echo 1;';
fwrite($pipes[0], $inputScript);
fclose($pipes[0]);
// 从输出管道中读取命令行输出的内容
$content = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$output_error = stream_get_contents($pipes[2]);
fclose($pipes[2]);
//关闭
$return_value = proc_close($process);
//替换掉开头的输出和空行
// $content=preg_replace('@Interactive shell\s*\n\s*\n@','',$content);
print_r($content);