-1

我有一个使用命令行作为服务器运行的 php 代码。我使用 telnet 客户端连接到服务器没有问题。但我不希望客户端是 telnet,我希望它是一个网页,以便来自世界各地的客户端可以连接。如何将网页连接到服务器?

4

1 回答 1

2

为了使用 web 界面连接到 shell,你需要一个完整的 apache 服务器和 php,比如 lamp/wamp

脚步:

  • 创建一个 Web 界面以向服务器发送命令并查看结果。ajax UI 可能对此有用。我会假设你知道 html/php/javascript 并且这对你来说不是问题。
  • 调用命令的“exec”php函数:http: //php.net/manual/es/function.exec.php

例子:

<?php
// Test the user!! you don't want that any one may use the command line of your server.
...
// Get the command to execute
$command='';
if (isset($_POST['command']))
{
    $command = $_POST['command'];
}
// Execute your command
if ($command!='') echo exec($command);
?>

您应该考虑将错误发送到 stderr,因此如果您想查看错误,则需要重定向: echo exec($command . ' 2>&1');

安全考虑:

  • 使用 SSL 进行所有通信
  • 小心不要让每个人都访问你的 shell,即使是奇怪的代码或 web 修改。
  • 测试是否允许使用 $command,不要只执行任何操作。
  • 使用允许上传文件的命令时要非常小心,例如“wget”。

其他注意事项:此脚本只允许执行简单的命令,但不允许与复杂软件进行完全双向通信,例如您不能像这样运行游戏服务器。如果这是您的意图,在 linux 上有一个允许重新连接到 shell 的应用程序“屏幕”。

//Define a screen name, may be whatever, but must be unique
$myScreenName='MyWebApp';

// To launch the app: 
echo exec('screen -S ' . $myScreenName . ' -d -m ' . $command . ' 2>&1 1>log.log');

// To re-connect to the shell in order to send new content:
echo exec('screen -S ' . $myScreenName . " -X -p0 stuff $'" . $command . "\n'");

// to test if the screen is active:
function testIfActive($myScreenName)
{
    exec('screen -ls', $screenLS);
    screenLs = implode('', $screenLS);
    return (stripos($screenLs, $myScreenName)!==false);
}
// to read the output, just read the log.log file.
于 2013-04-11T11:07:22.447 回答