PHP stream_select不起作用

时间:2012-07-04 12:52:59

标签: php windows proc-open

我正在使用Windows 7和php 5.

我遇到proc_open执行进程的问题并检查超时。 我用stream_select用这段代码检查超时:

<?php
$descriptorspec = array(
0 => array("file", $infile, "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("pipe", "w") // stderr is a file to write to
);
$prog = @proc_open ($objname.".exe", $descriptorspec, $pipes, "$DOCUMENT_ROOT/judge/temp", null, null);
if(!is_resource($prog)) ErrorResult("","proc_open err");

$streams = array($pipes[1]);
$start = microtime(true);
$ret = stream_select($streams, $a = null,$a = null, 1);
$stop = microtime(true);
?>

这是我用来测试的C ++代码:

#include<windows.h>

int main(){
    Sleep(2000);
    return 0;
}

在该代码中,根本没有输出,但stream_select不会等待1秒并返回1.

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我怀疑您的C ++可执行文件可能由于某种原因而未真正执行,但cmd.exe可能会向您隐藏退出代码。

  • 获取C ++可执行文件实际运行的证明。在调用stream_select之前尝试将一些数据从C ++传递给PHP。

  • 取消cmd.exe

    $ opts = array('suppress_errors'=&gt; false,'bypass_shell'=&gt; true);

    $ prog = proc_open($ objname。“。exe”,$ descriptorspec,$ pipes,“$ DOCUMENT_ROOT / judge / temp”,null,null,$ opts);