【问题标题】:connect web page to command line server将网页连接到命令行服务器
【发布时间】:2013-04-03 12:05:57
【问题描述】:

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

【问题讨论】:

  • 我已经安装了 wamp
  • 你能否详细解释一下这个问题
  • 我已经在装有 Windows 7 的电脑上安装了 wamp。现在我正在从命令提示符处运行 php 文件作为服务器。我主要是尝试使用套接字做聊天服务器。我也使用 telnet 作为客户端,到目前为止,一切都运行良好。问题是我不想使用 telnet 作为客户端,我希望客户端使用 Web 浏览器连接到我的服务器。这可能吗?

标签: php command webpage connect


【解决方案1】:

为了使用 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,即使是奇怪的代码或网络修改。
  • 测试 $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.

【讨论】:

  • 既然我们已经有了 fsockopen 来连接任何服务器套接字,为什么还需要做这么多 exec。
  • @kuldeep.kamboj fsockopen 是连接套接字,而不是执行命令。我想我不明白你。
  • 是的,你是对的,但是我的意思是对于 artibitary 服务器连接 fsockopen 是标准化的想法。您需要通过 fwrite / fgets file-handling-family 函数在其上写入/读取数据。
  • @kuldeep.kamboj 在上面的文字中,我解释了如何从 Web 客户端连接到服务器控制台,以便能够在没有 telnet/ssh 的情况下对其进行管理。此解决方案使用从客户端和 wamp/lamp 服务器之间的 Web 通信继承的 http 协议,并且在标准 tcp 套接字上工作。我目前使用这个解决方案来管理一些游戏服务器并允许用户通过网络购买游戏内物品。为此使用 fsockopen 就像重新发明轮子一样
  • 因为他已经设置了一个基于套接字的服务器,所以执行一些命令对他没有帮助,因为 exec 只是执行正常的系统命令,而他需要一个解决方案,让用户键入消息并点击聊天服务器。想想 telnet 的工作原理。
猜你喜欢
  • 2017-05-19
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多