dongyingdao8867 2016-08-17 07:16
浏览 93
已采纳

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

I'm facing problems on a new server to run commands with proc_open(). I created the following script for test:

$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 .= "
META: " . print_r(stream_get_meta_data($pipes[1]), true);

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

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

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

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

The script simply hangs and never shows the output. Getting a look into the console, I see that the script is spawning the same command multiple times. See:

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

However, the same script works on my local machine (Win10). I already googled about this issue but didn't find it anywhere else.

Is something related to the server environment, or PHP installation?

展开全部

  • 写回答

1条回答 默认 最新

  • dongshang1529 2016-09-13 11:13
    关注

    I don't know why, but changing the PHP handler from suphp to cgi on Apache solved the problem. Now the script behaves as expected.

    If someone can explain why, will be welcome.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部