PHPを使ってサーバー上で任意のコマンドを実行して結果を出力する
SSHで接続できないレンタルサーバー上で、とあるコマンドが使えるかどうかを調べたかった。
そのコマンドは、サーバー仕様には書いてないものでした。PHPからコマンドを実行できることを思い出したので、無理やり叩いて確かめてみました。
下記のコードを書いたPHPファイルをサーバーにアップロードしてアクセスすると、入力欄と実行ボタンだけのページが表示されます。入力欄にコマンド入力してボタンを押すと、PHPの passthru()
で実行した結果がページ下部に出力されます。
Warning
誰でもアクセスできるところには絶対に置かないでください。
例えば php --version
を実行した結果は次のようになります。
PHPには外部プログラムを実行できる関数がいくつかあるけど、passthru()
は exec()
と system()
とは違って、結果を変形しないでそのまま出してくれるらしいです。結果が戻り値じゃなくて標準出力に吐かれるので、ここでは出力バッファを使って回収してます。
でも、サーバー側の設定でコマンド実行系の関数を使えないようにされてたら、この方法はムリです。できたとしても、あんまり変なことしないように。