从 php 打开终端会话

发布于 2025-01-07 20:34:00 字数 1196 浏览 0 评论 0原文

我正在尝试编写一个 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";
}

,谢谢。

i'm trying to write a php page that
call for a server program like

gdb

the problem is if i did

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

the PHP call for the command and exist
BUT what i want to do is like open a "terminal" session
where the user enter commands in that program like

    gdb code
    ..
    break main
    ..
    run 

and after each command i give him the output and he give me the next command
and it won't work if i did it like this

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

and the PHP can be run from a browser
and i tried it with 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";
}

and thank you .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗心人 2025-01-14 20:34:00

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

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

原谅蹩脚的语法

Edit just saw you do try it from a browser. There is absolutely no simple way to do this. If you want an interactive session from the browser, you must run a separate daemon process and forward commands to it from PHP (and return output).

This is not simple at all; so if you still feel like doing this.. I would recommend starting with how to create a deamon; and then write a tcp socket server (or other IPC).

Excuse the crappy grammar

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文