【问题标题】:How to background a process via proc_open and have access to STDIN?如何通过 proc_open 后台进程并访问 STDIN?
【发布时间】:2012-03-15 19:01:04
【问题描述】:

我很高兴使用proc_open 将数据传送到另一个PHP 进程。 像这样的

$spec = array (
    0 => array('pipe', 'r'),
    // I don't need output pipes
);
$cmd = 'php -f another.php >out.log 2>err.log';
$process = proc_open( $cmd, $spec, $pipes );
fwrite( $pipes[0], 'hello world');
fclose( $pipes[0] );
proc_close($process);

在另一个 PHP 文件中,我使用以下命令回显 STDIN:

echo file_get_contents('php://stdin');

这很好用,但在我背景时却不行。只需将$cmd& 附加在一起,我就无法从STDIN 获得任何信息。我一定错过了一些基本的东西。

fgets(STDIN) 也会失败

有什么想法吗?

【问题讨论】:

    标签: php linux shell stdin


    【解决方案1】:

    您不能写入后台进程的 STDIN(至少,不是以正常方式)。

    This question on Server Fault 可能会让您了解如何解决此问题。

    无关:您说规范中不需要输出,但您在 $cmd 中指定它们;你可以这样写$spec

    $spec = array (
        0 => array('pipe', 'r'),
        1 => array('file', 'out.log', 'w'), // or 'a' to append
        2 => array('file', 'err.log', 'w'),
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2016-04-02
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2011-09-29
      • 2017-01-26
      相关资源
      最近更新 更多