为什么proc_open()多次运行相同的命令?

时间:2016-08-17 15:16:50

标签: php

我在新服务器上遇到问题,无法使用proc_open()运行命令。我为测试创建了以下脚本:

$desc = array(
    0 => array('pipe', 'r'), // we use to write data
    1 => array('pipe', 'w'), // we use to read data
    2 => array('pipe', 'w') // errors' log
);

$cmd = "exec php -v";
$process = proc_open($cmd, $desc, $pipes);

if (is_resource($process)) {
    stream_set_blocking($pipes[1], 0);
    stream_set_blocking($pipes[2], 0);
    $cmd .= "\nMETA: " . print_r(stream_get_meta_data($pipes[1]), true);

    if (is_resource($pipes[1])) {
        $cmd .= "\nSTDOUT: " . stream_get_contents($pipes[1]);
    }

    if (is_resource($pipes[2])) {
        $cmd .= "\nSTDERR: " . stream_get_contents($pipes[2]);
    }

    $status = proc_get_status($process);
    $cmd .= "\n" . print_r($status, true);
    proc_close($process);
} else {
    $cmd .= "\nFailed!";
}

echo "<pre>{$cmd}</pre>";

脚本只是挂起而且从不显示输出。看一下控制台,我看到脚本多次生成相同的命令。参见:

root[~]# clear && ps ax o pid,args | grep [p]hp
10122 /usr/bin/php /home/user/public_html/thread.php
10124 php -v
10126 php -v
10128 php -v
10130 php -v
10132 php -v
10134 php -v
10136 php -v
10138 php -v
10140 php -v
10142 php -v
10144 php -v
10146 php -v
10148 php -v
10150 php -v
10152 php -v
10154 php -v
10156 php -v
10158 php -v
10160 php -v
10162 php -v
10164 php -v
10166 php -v
10168 php -v
10170 php -v
10172 php -v
10174 php -v
10176 php -v
10178 php -v
10181 php -v
10184 php -v
10187 php -v
10189 php -v
10191 php -v
10193 php -v
10195 php -v
10197 php -v
10199 php -v
10201 php -v
10205 php -v
10207 php -v
10210 php -v
10212 php -v
10214 php -v
10216 php -v
10219 php -v
10222 php -v
10224 php -v
10226 php -v
10229 php -v
10231 php -v
10233 php -v
10235 php -v
10237 php -v
10239 php -v
10242 php -v
10245 php -v
10248 php -v
10250 php -v
10252 php -v
10254 php -v
10256 php -v
10258 php -v
10260 php -v
10262 php -v
10264 php -v
10266 php -v
10268 php -v
10270 php -v
10272 php -v
10274 php -v
10276 php -v
10279 php -v
10282 php -v
10284 php -v
10287 php -v
10289 php -v
10291 php -v
10293 php -v
10295 php -v
10297 php -v
10299 php -v
10301 php -v
10303 php -v
10305 php -v
10307 php -v
10309 php -v
10311 php -v
10313 php -v
10315 php -v
10317 php -v
10319 php -v
10321 php -v
10323 php -v
10325 php -v
10327 php -v
10329 php -v

但是,相同的脚本适用于我的本地计算机(Win10)。我已经在谷歌上搜索过这个问题,但在其他任何地方都找不到它。

是与服务器环境或PHP安装相关的东西吗?

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是在Apache上将PHP处理程序从suphp更改为cgi解决了这个问题。现在脚本的行为符合预期。

如果有人能解释原因,欢迎。