web-dev-qa-db-ja.com

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

Webサイトでボタンが押されたときにbashスクリプトを起動したい。これは私の最初の試みです:

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

しかし、運はありません。助言がありますか?

EDIT-slhclkとmitのアドバイスに従います:

/ var/wwwにphpファイルがあり、Webブラウザーを指定しています。ファイルの内容は次のとおりです。

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

tesh.shにはこれが含まれています:

screen -S server1 -X quit

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

12
dukevin

あなたがしようとしていることはそのようには不可能です。

これには常に2つの側面があることに注意してください。クライアント側とサーバー側です。スクリプトはクライアントコンピュータまたはサーバーのどちらにありますか?


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

考えてみてください:ブラウザーはファイルを開く方法をどのように知っていますかこれもセキュリティの問題だと思いませんか?クライアントのコンピューターでスクリプトの実行をトリガーする単純なWebサイトですか? onClick('rm -rf /home/user')のようなものがあった場合はどうなりますか?

代わりに、Javaアプレットを実行することもできます。クライアントでコードを実行する場合、これはまったく同じではなく、非常に複雑なことです。必要ではないと思います。これを詳しく説明してください。


スクリプトがサーバー上にある場合:サーバー側でスクリプトを実行し、ユーザーにその実行をトリガーさせる場合は、サーバー側のプログラミング言語。それは多かれ少なかれ静的ファイルなので、HTMLはそれをしません。サーバーとやり取りしたい場合は、たとえば [〜#〜] php [〜#〜] を使用できます。

Webサーバーに保存されているコマンドラインスクリプトを実行するための exec 関数があります。したがって、基本的には、exec('/path/to/name.sh');を記述して、サーバーでスクリプトを実行できます。

ただし、これをonClickに入れるだけでは十分ではありません。 PHPおよびサーバー側のWebプログラミングについてまだ知らない場合は、最初にいくつかのチュートリアルを読んでから、より具体的な質問に戻ってくることをお勧めします。


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

問題がある場合は、echo exec(...);を使用してスクリプトの戻り値を確認し、エラーがないかどうかを確認してください。

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

11
slhck

これにはサーバー側のインテリジェンスが必要です。 HTMLは静的であるため、HTMLだけでは十分ではありません。一般的な方法の1つは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コードおよび場合によってはテキスト出力)を取得し、それをブラウザーに書き込むとよいでしょう。これには別の質問に十分な問題があります:)

4
mit

許可の問題である可能性があります。

webappを使用してトリガーした場合、スクリプトを実行するのはApacheです。 Apacheにスクリプトを実行する権限がない場合、スクリプトは機能しません。

解決策:権限を確認して再試行してください。

3
user635568

私はこれがかなり遅いことを知っていますが、サーバーでCGIを構成すると、PHPやその他の種類を使用せずにサーバー側のbashスクリプトを実行できるようになることに注意する価値があります。

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

1
Torreh

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

Options +ExecCGI
AddHandler cgi-script .sh

これは、.shファイルをCGIスクリプトとして扱うようにWebサーバーに指示します。 .shファイルのアクセス許可を755に変更することを忘れないでください。

0
Agnel Vishal