コマンドラインを使用してサーバーとして実行されているphpコードがあります。問題なくサーバーに接続するためにtelnetクライアントを使用しています。しかし、クライアントを telnet にするのではなく、世界中のクライアントが接続できる Web ページにしたいのです。Web ページをサーバーに接続するにはどうすればよいですか?
1794 次
1 に答える
2
Web インターフェイスを使用してシェルに接続するには、lamp/wamp のような、php を備えた完全な Apache サーバーが必要です。
手順:
- サーバー コマンドに送信して結果を確認するための 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 を使用する
- 変なコードや Web の変更があっても、誰もがあなたのシェルにアクセスできないように細心の注意を払ってください。
- $command が許可されていることをテストします。何も実行しないでください。
- 「wget」など、ファイルのアップロードを許可するコマンドには十分注意してください。
その他の考慮事項: このスクリプトは単純なコマンドの実行のみを許可しますが、複雑なソフトウェアとの完全な双方向通信は許可しません。たとえば、ゲーム サーバーをこのように実行することはできません。これがあなたの意図である場合、Linux には、シェルに再接続できるアプリケーション「スクリーン」があります。
//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 に答える