通过管道 $_POST 到外部命令

2024-02-01

我有一个程序可以读取 JSON 请求stdin,我想用 PHP 调用它。 这就是我现在所拥有的

<?php
echo exec(
  'echo \''.json_encode($_POST,JSON_NUMERIC_CHECK).'\' | '.
  'program'
);
?>

这可行,但是有没有更直接的方法将 PHP 中的字符串放入stdin? 类似的东西pipe(json_encode($_POST,JSON_NUMERIC_CHECK),'program') maybe?

在这种特殊情况下,我所拥有的可能没问题,但如果我需要管道二进制数据而不是 JSON,该怎么办?如果它太长而无法放入 shell 参数或包含单引号怎么办?

Edit:

下列的miken32 https://stackoverflow.com/users/1255289的建议,我用过proc_open() http://php.net/manual/en/function.proc-open.php像这样:

$proc = proc_open(
  'LD_LIBRARY_PATH=/foo/bar/lib program args',
  array(0 => array('pipe','r'), 1 => array('pipe','w')),
  $pipes,
  NULL
  //, array('LD_LIBRARY_PATH','/foo/bar/lib')
);
if (is_resource($proc)) {
  fwrite($pipes[0],json_encode($_POST,JSON_NUMERIC_CHECK));
  fclose($pipes[0]);

  echo stream_get_contents($pipes[1]);
  fclose($pipes[1]);

  proc_close($proc);
}
?>

但我必须添加LD_LIBRARY_PATH=/foo/bar/lib到命令参数。这$env争论似乎没有效果。有谁知道为什么?


您可以使用popen() http://php.net/manual/en/function.popen.php创建流程的管道:

<?php
$data = json_encode($_POST, JSON_NUMERIC_CHECK);
$p = popen("program", "w");
fwrite($p, $data . PHP_EOL);
$exit_code = pclose($p);

如果您需要从程序中获取数据,事情会变得更加复杂,您需要使用proc_open() http://php.net/manual/en/function.proc-open.php反而。

<?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";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过管道 $_POST 到外部命令 的相关文章

  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • 克隆和引用传递问题

    所以在过去的几天里 我一直在绞尽脑汁地试图让一个类能够正确克隆 问题是克隆不会删除 重做任何引用传递 结果是 主数据对象仍然作为引用传递 从而完全抵消了克隆的效果 这是问题的简化版本 class my class private data
  • XP及PHP MYSQL 练级系统

    我已经查看了所有提出的问题和答案 但我似乎找不到最适合我的答案 我想做的是开发一个系统 当用户达到一定的 XP 限制时 系统会进入下一个级别 它显示了下一个 XP 之前需要多少 XP So lvl1 0 gt lvl2 256 gt lvl
  • 如何在 Laravel 5 中对合并集合进行分页?

    我正在创建一个包含两种类型的对象的流 BluePerson 和 RedPerson 为了创建流 我获取所有这两个对象 然后将它们合并到一个集合中 这样做之后 我需要对它们进行分页 但是分页似乎是针对雄辩的模型和数据库查询 而不是集合 我见过
  • Zend 如何使用 mod_rewrite 解析前端控制器中的 URL?

    我不明白 Zend Framework 如何控制路由 我实际上正在尝试创建自己的控制器 路由类 编写了与 Zend 建议的 htaccess 相同的代码 以重写位于网站根目录的index php RewriteEngine On Rewri
  • 为什么 SORT_REGULAR 在 PHP 中产生不一致的结果?

    我正在开发一个类 它使 PHP 中的数组排序变得更容易 并且我一直在使用 SORT 常量 但是行为或SORT REGULAR 默认排序类型 似乎有所不同 具体取决于您在数组中添加项目的顺序 此外 我找不到任何模式来解释为什么会出现这种情况
  • php递归合并

    我需要以某种不同的方式合并一些数组 我使用 array merge recursive 然而 有一些事情我需要改变 但我不知道如何改变 这是来自 php net 的引用 但是 如果数组具有相同的数字键 则后面的值 不会覆盖原始值 但会追加
  • PHP 从日志事件中获取行号

    好的 我还有一个问题HERE https stackoverflow com questions 3213423 php how could i make this class better suggestions feedback wel
  • PHP 中的抽象类是什么?

    PHP 中的抽象类是什么 如何使用 抽象类是至少包含一个抽象方法的类 该方法中没有任何实际代码 只有名称和参数 并且已被标记为 抽象 这样做的目的是提供一种模板来继承并强制继承类实现抽象方法 因此 抽象类是介于常规类和纯接口之间的东西 此外
  • 如何在 WordPress/WooCommerce 3+ 中向评论表单添加自定义字段

    我正在尝试在产品评论中添加 电话 字段 WooCommerce 3 针对未注册用户 来宾 电话号码只能由管理员在管理面板中看到 电话字段需要填写 Required 我尝试了这段代码 但这不起作用 function true phone nu
  • Laravel 上传前如何压缩图像?

    我正在制作一个图片库网站 用户可以在其中上传任何图像 它们将显示在前端 我需要在不影响图像质量的情况下压缩图像 以减小图像大小 以便页面加载速度不会影响那么大 我使用以下代码来上传图像 rules array file gt require
  • PHP 负面因素不断增加

    我这里有这个代码 remaining 0 foreach clientArrayInvoice as key gt row remaining remaining row total 它的作用是 它获取总计值并将它们相加 但是当我有负值时
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 如何使用xquery查找节点并向其添加子节点?

    是否可以使用xpath xquery查询特定的xml节点 然后向其导入 添加子节点 示例 代码取自http codepad org gJ1Y2LjM http codepad org gJ1Y2LjM 这是在类似的问题中提出的 但不相同 1
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php

随机推荐

  • 使用 VBA 过滤函数时的性能注意事项

    我不明白 Filter 功能如何运行得这么快 我对各种数据使用了 Filter 无论数据类型如何 Filter 都会消除我使用的任何替代方法 我经常使用由 Stephen Bullen 编写的二分搜索算法和 QuickArraySort 算
  • 从 R 中的给定字符串中提取日期

    这是我有的一个字符串 7MA S VE MS FB MEASURE P1 2013 08 21 17 42 19 BMP 我正在尝试以这种方式提取日期 library stringr as Date str extract test 0 9
  • 如何向多个收件人发送消息?

    我在使用 Gmail API 向多个地址发送邮件时遇到一些问题 我已成功将一封邮件仅发送到一个地址 但当我在邮件中包含多个以逗号分隔的地址时 出现以下错误 To field 请求时发生错误 https www googleapis com
  • 如何避免在多态打印宏中使用 #if

    让我们尝试运行以下代码 include
  • JavaScript 获取数组的一部分

    如何创建一个新数组 其中包含旧数组中编号为第 n 到第 n k 的所有元素 你想要的slice https developer mozilla org en US docs JavaScript Reference Global Objec
  • Python ZeroMQ PUSH/PULL——丢失消息?

    我正在尝试使用python with zeroMQ in PUSH PULL模式 发送大小的消息4 MB 每隔几秒钟 由于某种原因 虽然看起来所有消息都已发送 但服务器似乎只收到了其中一些消息 我在这里缺少什么 这是客户端的代码 clien
  • SQL查询获取具有子记录列表的父表记录

    我在 MS SQL Server 2005 数据库中有两个表 父表和子表 其中父表可能与许多子记录相关 Child parent id 与 parent id 相关 子表也有列 foo 我需要带回父表中的所有记录 其中 child foo
  • 如何在 Python 上使用 Xlib 模拟鼠标点击

    出于教育目的 我开始使用以下命令编写 python 脚本cwiid and Xlib这样我就可以像鼠标一样使用我的wiimote 到目前为止 我已经通过调用让光标移动disp warp pointer dx dy 然后打电话disp syn
  • SVGSVGElement.children 在 IE11 中不起作用?

    我这里有一个非常简单的jsfiddle http jsfiddle net 9uS3u http jsfiddle net 9uS3u 它由以下 html 组成
  • httprequest.getsession 返回 null

    我编写了一个过滤器 它将使当前会话无效并创建新会话并将旧会话的属性复制到新会话中 这在 tomcat5 和 jdk 1 4 中工作正常 但是当我将其切换到 tomcat6 和 jdk 1 6 时 一旦过滤器运行 然后处理下一个请求httpr
  • 如何使用 Python 跟踪在网络浏览器中打开的网页? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想编写一个 Python 脚本 它可以跟踪我的网络浏览器 Mozilla Firefox 23 中打开了哪些网页 我不知道从哪里开始
  • Google Colaboratory:有关其 GPU 的误导性信息(仅 5% RAM 可供某些用户使用)

    更新 这个问题与Google Colab的 笔记本设置 硬件加速器 GPU 有关 这个问题是在添加 TPU 选项之前写的 阅读了有关 Google Colaboratory 提供免费 Tesla K80 GPU 的多个令人兴奋的公告 我尝试
  • html 标签内的正则表达式

    我想从以下 HTML 片段中解析高清价格 我只有 html 代码的片段 所以我不能为此使用 HTML 解析器 div span View In iTunes span span class price 19 99 span ul class
  • 有没有办法在 Typescript 文件中使用 svelte getContext 等 svelte 函数?

    我正在使用 getContext 与苗条简单模态 https www npmjs com package svelte simple modal对于我的项目中的模态 有没有办法在 Typescript 文件中使用 getContext 等
  • 有关编写 Debian/Ubuntu deb 软件包的资源? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开始为 Ubuntu 服务器上的软件包准备安装脚本 我想编写一个脚本作为 deb 包 它知道必须
  • Node.js:在继续之前在循环中等待回调

    我有一个循环 里面有一个异步调用和一个回调 为了能够继续 我需要回调在整个循环中一直触发 然后显示循环的结果 我尝试过的各种控制方法都行不通 已经尝试过 Step Tame js async js 等 关于如何继续前进有什么建议吗 arra
  • 计算经过三个数组的最短路径

    我有三个数组 也可能是n个 现在让我们举三个 他们有这样的价值观 Array1 143 181 Array2 41 153 241 Array3 22 67 131 190 我想找到这三个数组中的那些元素 谁的差异最小 在本例中 143 1
  • 我在 sdk 管理器中找不到“Android SDK 文档”

    我有一个问题 它是关于找到 Android SDK 的文档 我在谷歌和这个网站中搜索 我找到了关于这个问题的解决方案topic https stackoverflow com questions 15748558 android devel
  • Java - 如何获取 JSON 数组中的对象值?

    我有一个类似于下面示例的 JSON 我正在尝试获取一些值 例如值 results shipper id results updated false notification false some data id 15989 pieces 0
  • 通过管道 $_POST 到外部命令

    我有一个程序可以读取 JSON 请求stdin 我想用 PHP 调用它 这就是我现在所拥有的 这可行 但是有没有更直接的方法将 PHP 中的字符串放入stdin 类似的东西pipe json encode POST JSON NUMERIC