2011-06-04 09:01:23 +0000 2011-06-04 09:01:23 +0000
12
12
Advertisement

htmlボタンでシェルスクリプトを実行する

Advertisement

ウェブサイトでボタンが押されたときにバッシュスクリプトを起動したい。これは私の初の試みです。

<button type="button" onclick="/path/to/name.sh">Click Me!</button>

しかし、うまくいきません。何か提案はありますか?

<?php
exec("/home/aa/scripts/test.sh");
?>

ウェブブラウザを指す/var/wwwにphpファイルがあります。ファイルの内容は以下の通りです。

screen -S server1 -X quit

tesh.shに含まれています。

0x1&

シェルで/home/aa/scripts/test.shと入力するとスクリプトが実行できます。しかし、Web ブラウザを http://example.com/screen.php (上記のコードがある) に向けると、空白のページが表示され、スクリプトは実行されていませんでした。どちらも実行権限があります。なぜ実行できないのでしょうか?

Advertisement
Advertisement

回答 (5)

11
11
11
2011-06-04 09:37:02 +0000

あなたがやろうとしていることは、その方法では不可能です。

これには必ず2つの側面があることに注意してください。クライアント側とサーバー側です。スクリプトはクライアントコンピュータ上にあるのか、それともサーバ上にあるのか?


クライアント上にある場合:訪問者はHTMLのウェブサイトを見ているだけです。onClickはJavaScript(または 他のスクリプト言語 )のみを起動することができますが、コンピュータ上に存在する任意のシェルスクリプトは起動できません。HTMLスクリプトはブラウザ上でしか実行できず、できることは限られています。最も重要なのは、あなたのコンピュータと対話することができないということです。

考えてみてください。ブラウザはファイルの開き方をどうやって知るのでしょうか?これはセキュリティ上の問題でもあると思いませんか?普通のウェブサイトがクライアントのコンピュータ上でスクリプトの実行を誘発してしまうのです。onClick('rm -rf /home/user')

のようなものがあったらどうでしょうか? クライアント上でコードを実行させたい場合は、Java アプレットを実行するという方法もありますが、これは完全に同じではないし、非常に複雑です。これについて詳しく説明する必要はないと思います。

スクリプトがサーバー上にある場合: サーバー側でスクリプトを実行して、ユーザーに実行をトリガーさせたい場合は、サーバー側のプログラミング言語を使用する必要があります。HTMLだけではできません。サーバーと対話したい場合は、例えば PHP . . . を使用することができます。

これは、ウェブサーバに保存されているコマンドラインスクリプトを実行するための exec 関数を持っています。つまり、基本的にはexec('/path/to/name.sh');と書けば、サーバー上でスクリプトを実行してくれます。

ただし、ここではこれをonClickに入れるだけでは不十分です。まだPHPやサーバーサイドのWebプログラミングのことを知らない人は、まずチュートリアルをいくつか読んでから、より具体的な質問をしてみるといいかもしれません。


適切なexec(...)コマンドを含むphpファイルがある場合、スクリプトの実行権限がユーザーだけでなく、ウェブサーバーが所属するグループにも設定されていることを確認してください、最も簡単な場合は777だけです。

トラブルが発生した場合は、スクリプトの戻り値を echo exec(...); でチェックしてエラーがないかどうかを確認してください。

php /path/to/file.php でブラウザからではなくコマンドラインからスクリプトを実行することもできます。

4
4
4
2011-06-04 09:50:25 +0000

これにはサーバーサイドのインテリジェンスが必要です。HTMLだけでは静的なので、十分ではありません。一般的な方法はphpです。多くのホスティングサービスでは、デフォルトでphpがインストールされています。

ftpプログラムを使用して、テキストファイルをサーバのルートディレクトリに置くことができます。

テキストファイルの名前は “run.php "とし、以下の内容にすることができます。

<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>

あなたのドメインが「example.com」であるとします。 http://example.com/run.php

とすると、サーバー上でphpファイルが実行されます。これは、見出しのついたHTMLページをブラウザに送信します。そして、サーバー上でスクリプトが実行されます。

いくつかの注意点と改善点があります。

1) 誰もがこのページを攻撃できるようになります。htacces でページを保護することができます。

2) このページはブラウザからの通常の "GET "リクエストの場合に起動します。しかし、これはサーバ上でのアクションを伴うので、このアクションがデータを変更したり、何か重要なことをする場合は、POSTリクエストでのみスクリプトを実行した方が良いでしょう。

3) フォーム/ボタン文を挿入して、ページを再読み込み/再実行できるようにすることができます。HTMLフォーム文のmethod属性には、正しいメソッド(GETかPOST)を使用するようにしてください。

4) シェルスクリプトの結果(rturnコードと多分テキスト出力)を取得してブラウザに書き込むのが良いでしょう。これは別の質問のために十分な問題があります。)

3
Advertisement
3
3
2012-01-06 06:21:27 +0000
Advertisement

パーミッションの問題かもしれません。

webapp を使ってトリガーした場合、スクリプトを実行するのは apache です。もし apache がスクリプトを実行する権限を持っていない場合は、動作しません。

解決策: パーミッションをチェックして、もう一度試してみてください。)

1
1
1
2018-08-11 08:36:42 +0000

遅くなってしまいましたが、サーバー上でCGIを設定することで、PHPなどを使わずにサーバーサイドのbashスクリプトを実行できるようになるということは注目に値すると思います。

これは更新された質問に対応していないことはわかっていますが、自分で物事を理解しようとしているときにこれを見つけたので、投稿してみようと思いました!

0
Advertisement
0
0
2018-11-09 17:43:32 +0000
Advertisement

ブラウザから直接シェルスクリプトを実行するには、.htaccess ファイルにこのルールを追加する必要があります。

Options +ExecCGI
AddHandler cgi-script .sh

これにより、ウェブサーバは.shファイルをCGIスクリプトとして扱うようになります。.shファイルのパーミッションを755に変更することを忘れないでください。

Advertisement

関連する質問

6
10
11
37
2
Advertisement