从php打开一个终端会话

时间:2012-02-23 00:39:54

标签: php unix

我正在尝试编写一个php页面 要求像

这样的服务器程序
gdb
问题是,如果我做了

<?php
exec(" gdb code", $out); 
?>

PHP调用该命令并存在  但我想做的就像打开一个“终端”会话 用户在该程序中输入命令,如

    gdb code
    ..
    break main
    ..
    run 

在每个命令之后我给他输出,然后他给我下一个命令 如果我这样做的话,它将无法运作

     <?php
    exec(" gdb code", $out);
 exec(" break", $out);
 exec(" run", $out);
    ?>

可以从浏览器运行PHP 我用pro_open

试了一下
<?php
$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("file", "/var/www/err.log", "a")
);

$cwd = '/var/www';
$env = array('some_option' => 'aeiou');
$StdErr='';
$process = proc_open('/bin/bash', $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
    fwrite($pipes[0], "gcc code   ");
    fwrite($pipes[0], " break main");
    fflush($pipes[0]);
    fclose($pipes[0]);
    while(!feof($pipes[1]))    {
          echo fgets($pipes[1], 1024);
           }
    echo $StdErr;
    fclose($pipes[1]);
    $return_value = proc_close($process);
    echo "command returned : $return_value\n";
}

谢谢你。

1 个答案:

答案 0 :(得分:0)

编辑刚刚看到你在浏览器中尝试过。绝对没有简单的方法可以做到这一点。如果您希望从浏览器进行交互式会话,则必须运行单独的守护程序进程并从PHP转发命令(并返回输出)。

这一点都不简单;所以,如果你仍然想这样做...我会建议从如何创建一个deamon开始;然后编写一个tcp套接字服务器(或其他IPC)。

请原谅粗俗的语法