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