【问题标题】:How to have one PHP script launch another and capture its output?如何让一个 PHP 脚本启动另一个并捕获其输出?
【发布时间】:2010-04-17 04:16:48
【问题描述】:

这有点棘手,所以请耐心等待:

  • 我有一个 PHP 脚本 a.php 从命令行启动,数据通过 STDIN 提供给它
  • 我有另一个 PHP 脚本b.php
  • 我想让a.php 启动b.php 并捕获它的输出
  • 另外,a.php 必须将STDIN 转发到b.php

有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: php redirect input


    【解决方案1】:

    如果只是捕获另一个程序的标准输出(php 与否),您可以使用反引号: http://php.net/manual/en/language.operators.execution.php。 例如:

    $boutput = `php b.php`;
    

    要捕获标准输入,请执行以下操作:

    $ainput = file_get_contents('php://stdin');
    

    最后,要将字符串的内容通过管道传输到外部程序,请使用 proc_open,正如 jeremy 的回答所建议的那样。 具体来说,这是您的 a.php 应包含的内容:

    $ainput = file_get_contents('php://stdin');
    $descriptorspec = array(
            0 => array("pipe", "r"),
            1 => array("pipe", "w"),
            2 => array("pipe", "w")
    );
    $process = proc_open('php b.php', $descriptorspec, $pipes);
    fwrite($pipes[0], $ainput);
    fclose($pipes[0]);
    echo stream_get_contents($pipes[1]); # echo output of "b.php < stdin-from-a.php"
    fclose($pipes[1]);
    proc_close($process);
    

    【讨论】:

    • 你的意思是你想让B.php在从A.php调用时通过STDIN接受命令?从这一点开始包含,并将输出包装在 ob_startob_get_flush 命令周围不是更好吗?
    • 呃...我无法将'php b.php' 传递给fopen
    • 对不起,我的第一次尝试是错误的。我测试了现在有什么,它似乎可以工作。
    • 它适用于 Windows.... 但现在它不适用于我的 linux 服务器。不过,您的回答是最有帮助的。 +1
    • 哦不! proc_open 在我的服务器上被禁用了......哦,亲爱的......现在怎么办?
    【解决方案2】:

    proc_open() 应该为您提供执行此操作所需的控制级别。

    【讨论】:

    • 这看起来很有希望。我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多