Php 管道$\u POST到外部命令
我有一个程序可以从stdin中读取JSON请求,我想用PHP调用它。 这是我现在拥有的Php 管道$\u POST到外部命令,php,post,request,pipe,Php,Post,Request,Pipe,我有一个程序可以从stdin中读取JSON请求,我想用PHP调用它。 这是我现在拥有的 <?php echo exec( 'echo \''.json_encode($_POST,JSON_NUMERIC_CHECK).'\' | '. 'program' ); ?> 但是我必须在命令参数中添加LD\u LIBRARY\u PATH=/foo/bar/lib。$env参数似乎没有效果。有人知道原因吗?您可以使用创建流程的管道: <?php $data = json_e
<?php
echo exec(
'echo \''.json_encode($_POST,JSON_NUMERIC_CHECK).'\' | '.
'program'
);
?>
但是我必须在命令参数中添加LD\u LIBRARY\u PATH=/foo/bar/lib
。$env
参数似乎没有效果。有人知道原因吗?您可以使用创建流程的管道:
<?php
$data = json_encode($_POST, JSON_NUMERIC_CHECK);
$p = popen("program", "w");
fwrite($p, $data . PHP_EOL);
$exit_code = pclose($p);
或包含单引号
这就是escapeshellarg()
的含义。。。那么,我的答案对你有用吗?我觉得你只提供了半个答案。我需要将数据导入和导出,而您的示例仅将其导入。对不起,我不认为我只能接受链接的答案。我给你一票。啊,你的问题没有提到需要产出,所以我只是加了一个脚注。我只是注意到你的编辑;如果你不想接受我的答案,你可以发布你自己的答案,并将其标记为已接受的答案。通常不赞成在打开问题时编辑问题以将其标记为“已解决”。环境数组需要关联,如[“LD\u LIBRARY\u PATH”=>“/foo/bar/lib”]
<?php
$data = json_encode($_POST, JSON_NUMERIC_CHECK);
$p = popen("program", "w");
fwrite($p, $data . PHP_EOL);
$exit_code = pclose($p);
<?php
$data = json_encode($_POST, JSON_NUMERIC_CHECK);
$fds = [
0=>["pipe", "r"], // STDIN
1=>["pipe", "w"], // STDOUT
2=>["pipe", "w"], // STDERR
];
$dir = "/path/to/working/directory";
$env = [
"PATH" => "/usr/local/foo/bin:/usr/local/bin:/usr/bin",
"LD_LIBRARY_PATH" => "/usr/local/foo/lib/",
];
$p = proc_open("program", $fds, $pipes, $dir, $env);
fwrite($pipes[0], $data . PHP_EOL);
fclose($pipes[0]);
$return = stream_get_contents($pipes[1]);
$err = stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
$exit_code = proc_close($p);
if ($exit_code == 0) {
// successful return
echo $return;
} else {
// error
echo "ERR: $err";
}