PHP 与命令行程序交互

2024-01-04

我有一个命令行程序,它从流中获取输入,而不是作为命令行参数。(例如,使用 scanf 获取输入的 C 程序。)我如何使用 PHP 与此应用程序交互? exec()、shell_exec() 在这里不会有帮助,因为输入不是通过命令行参数。我需要在 PHP 脚本和命令行程序之间建立持续的输入/输出连接,以便用户可以向 PHP 提供输入,PHP 将其转发给程序,然后获取输出,并将其显示给用户。


您可以使用proc_open http://php.net/manual/en/function.proc-open.php为了这。

该页面的示例:

<?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
);

$cwd = '/tmp';
$env = array('some_option' => 'aeiou');

$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt

    fwrite($pipes[0], '<?php print_r($_ENV); ?>');
    fclose($pipes[0]);

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

    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}
?>

Output:

Array
(
    [some_option] => aeiou
    [PWD] => /tmp
    [SHLVL] => 1
    [_] => /usr/local/bin/php
)
command returned 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 与命令行程序交互 的相关文章

  • Woocommerce 获取购物车页面上的特定属性值

    我正在尝试在 woocommerce 购物车页面中获取特定属性值 我在表格中制作了自定义列 如下所示 td class product color td
  • 添加发票时 QuickBooks IPP v3 出现错误 3200

    我已经在生产中使用 QuickBooks PHP DevKit 一段时间了 没有出现任何问题 然而 最近我从我的程序中收到以下错误create invoiceajax脚本当我吐出来的时候 if resp InvoiceService gt
  • 如何将 pChart 创建的图像保存到文件中?

    我正在使用以下内容 chartImage gt autoOutput statistics image png 问题是这段代码将图像输出到浏览器 如果它将图像保存到具有我指定的目录和名称的文件中 我会更喜欢它 我该怎么做呢 我正在查看 pC
  • 用户上传文件夹结构

    随着网站的增长 用户上传的文件夹结构会对性能产生影响吗 例如 我考虑用这种结构来存储照片 相册 Public folder Uploads Users User ID Album ID contains all photos in the
  • php、curl、标题和内容类型

    我在处理服务器返回的curl 和标头时遇到一些问题 1 my website com index php 上的 php 文件如下所示 修剪版本 my content
  • 警告:出于安全原因,`exec()`已被禁用[重复]

    这个问题在这里已经有答案了 我将 gif 上传到我的网站 上传完成后 我可以看到此错误 Warning exec has been disabled for security reasons in data web virtuals 289
  • 解析xml文件时获取cdata内容

    我有一个 xml 文件
  • 如何在特定视图上禁用 yii-debug-toolbar?

    我怎样才能禁用yii debug toolbar在特定视图上 特别是在部分渲染视图上 这可能吗 p s Yii debug toolbar不幸的是 它不作为下面的标签存在 将其放入您的布局或视图文件中 if class exists yii
  • 如何从继承的方法中获取派生类的路径?

    如何从继承的方法中获取当前类的路径 我有以下内容 and
  • 传递多个数组以在 codeigniter 中查看

    我的模型是这个 两个函数view和spl function view result this gt db gt get tb ourcity return result gt result array query this gt db gt
  • 将大数字转换为字母(然后再转换回来)

    是否有一个术语来描述将大数字存储为字母的想法 例如 假设我有 相对较小的 数字 138201162401719 并且我想将字符数缩小到尽可能少的字符数 我知道这无助于节省磁盘空间 英文字母表中有 26 个字母 但我将它们算作 25 个 因为
  • PHPMailer - AddAttachment 不起作用

    我有一个网络表单 它使用 phpmailer 函数将表单内容通过电子邮件发送回给我 我正在尝试添加 AddAttachment 功能 但我似乎在 php ini 中遇到问题 这是我的 html 片段 td div align right A
  • 限制检索的行数 MySql、Laravel

    问题 我的问题是使用 Mysql 或 Laravel 通过查询返回的行数是否有限制 首先 我使用 Laravel 5 2 我试图从日志表中检索数据 该表最近已超过 10k 行 现在从那时起 或大约那个时候 用于检索数据的常用 Laravel
  • PHP 从 MSSQL 存储过程获取返回值

    我无法从 SQL Server MSSQL 2012 SP 获取 OUTPUT 参数以返回 PHP 我的存储过程是 CREATE PROCEDURE spGetNextSeqID ID AS INT OUTPUT AS BEGIN BEGI
  • mysql_escape_string VS mysql_real_escape_string

    我知道mysql escape string从 5 3 开始已弃用 但实际差异是什么mysql real escape string 我的想法是mysql real escape string与以下完全相同mysql escape stri
  • 以编程方式将礼品消息设置为现有订单[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找一些代码 以便在 Mage
  • 使用Zend实现文件上传进度

    您好 我正在尝试使用 Zend 实现上传进度 但是我还没有找到任何详细的教程 指针会很有用 Thanks 我不记得曾经看过完整详细的教程来解释如何使用 Zend Framework 获取上传进度条 但这里有一些提示 如果您已经了解有关 PH
  • Laravel 模型访问器从缓存中获取 - 性能增强

    我在数据库中有一个项目列表 每个项目都可以选择被否决或赞成 这些投票与其他项目字段一起存储在 MySql 中 例如这样的事情 Schema create items function table table gt increments id
  • Amazon Linux 上的 Nginx + php-fpm = 在信号 11 上退出

    亚马逊 Linux 最新 PHP 5 4 19 cli 构建时间 2013 年 9 月 3 日 23 19 23 nginx版本 nginx 1 2 9 安装 PHP FPM PHP 5 4 19 fpm fcgi 构建时间 2013 年
  • 如何在 PHP 中知道种子/对等点的数量

    当您放置一个 torrent文件在您的网站上下载 您如何获取该 Torrent 的种子和同级数量并通知用户 您必须联系 torrent 文件中显示的跟踪器 如果跟踪器支持 抓取 这可能就是您想要的请求 否则 由跟踪器决定要返回多少个对等点给

随机推荐