1

PHPでLinuxコマンドを実行したい

myfile.php:

<?php
$output = shell_exec('ls');
echo "<pre>$output</pre>";
?>

できます!

しかし、Linux コマンドを から に変更しlsrebootも、何も起こりません!

だから私は別の解決策を見つけようとしました:

mycode.html:

<button type="button" onclick="/var/www/myscript.sh">Click Me!</button>

myscript.sh:

sudo reboot

それもうまくいきません!

誰かがこの問題を解決するのを手伝ってくれますか。

ご協力いただきありがとうございます。

4

3 に答える 3

6

デフォルトでは、reboot コマンドは root として実行する必要があります。Web サーバーがルート アカウントで実行されている場合は、これを行うことができますが、これは非常に珍しい提案です。

通常、Web サーバーは制限されたアカウントで実行され、多くのことを行うことができず、再起動を実行することはできません。本当にそうしたいのなら、細心の注意を払って行う必要があります。これを提供する標準的な方法は、昇格されたパーミッションでの実行を許可する前に、多くの条件をチェックする特別なラッパー (おそらく suid) を作成することです。

別の解決策は、PHP にフラグ ファイルを作成させるか、特別なデータベース エントリを挿入させることです。これは、ルートとして実行されている別のサービスによってチェックされ、そのフラグに気づき、最後に再起動を実行します。

于 2013-10-01T06:35:16.603 に答える
5

@mvp が言うように、root 以外のユーザーとして再起動を実行することはできません。

これを行う簡単な方法は、cron ジョブを使用することです。

myscript.sh は次のようになります。

#!/bin/bash
touch /tmp/reboot.now

次に、このファイルが存在するかどうかを確認する cron ジョブを作成します。

#!/bin/bash
if [ -f /tmp/reboot.now ]; then
  rm -f /tmp/reboot.now
  /sbin/shutdown -r now 
fi

次に、このスクリプトを毎分実行するようにサーバーを構成します

* * * * * /usr/local/sbin/reboot.sh

もちろん、ファイルに実行権限を与えることを忘れないでください。

それが役に立てば幸い

編集済み: もちろん、代わりにand を使用myscript.shして php にすることもできますfopenfclose

于 2013-10-01T07:01:40.280 に答える
2

Sal00mの回答に加えて

ROOT crontab

* * * * * /usr/local/sbin/checkreboot.sh

checkreboot.sh

#!/bin/bash
if [ -f /var/www/html/reboot.server ]; then
  rm -f /var/www/html/reboot.server
  /sbin/shutdown -r now 
fi

再起動.php

<?php
$filehandler = fopen("/var/www/html/reboot.server",'w');
fwrite($filehandler,"Reboot now\n");
fclose($filehandler);
?>

http://www.linuxquestions.org/questions/linux-newbie-8/shutdown-and-reboot-linux-system-via-php-script-713379/#post3486126から

于 2014-07-13T15:11:04.650 に答える