はじめに
自分が使用しているレンタルサーバーは「さくらのレンタルサーバのライトプラン」で、SSH接続ができない仕様となっています。
なんとかコマンド実行できないか調べたところ、PHPのexec関数を使えば可能だったので、手順についてまとめます。
出典:プラン比較 - レンタルサーバーはさくらインターネット
環境
PHPがはいっていることが前提となります。
- サーバー:さくらのレンタルサーバ - ライトプラン
- PHPのバージョン:8.1.20
手順
-
phpファイルを作成し、次のようなスクリプトを記述する(
$command
変数に実行したいコマンドを記述する)<pre> <?php $command = 'php -v'; exec($command . ' 2>&1', $output, $result); echo '実行したコマンド:' . $command . '<br>'; echo '結果:' . $result . '<br>'; print_r($output); ?> </pre>
-
作成したphpファイルをFTPなどを用いてレンタルサーバーへアップロードする
-
ブラウザから、phpのファイルのパスを指定すると、コマンドが実行される
結果のあとの番号が0なら成功、0以外なら失敗しています。
番号の内容についてはこちらを参考にしてください。
Exit Codes With Special Meanings
具体例:Composerコマンドを実行する例
PHPのライブラリ管理ツール「Composer」を使ってライブラリをインストールしたいが、サーバーへSSH接続できない場合の方法です。
-
Composerのサイトから、phpではじまる4行のスクリプトをコピーし、ローカル端末の任意のパスでコマンドを実行する
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
※スクリプトは更新されるようなので、サイトから最新のスクリプトをコピーしたほうがよさそうです
-
コマンドを実行したパスに「composer.phar」が作成されていることを確認する
-
作成した「composer.phar」をFTPなどを用いてサーバーの任意のフォルダーへアップロードする
-
次のスクリプトを記載したPHPファイルを作成し、サーバーの「composer.phar」と同じ階層へアップロードする
<pre> <?php $command = 'export HOME="/root"; php composer.phar'; exec($command . ' 2>&1', $output, $result); echo '実行したコマンド:' . $command . '<br>'; echo '結果:' . $result . '<br>'; print_r($output); ?> </pre>
-
ブラウザから、phpのファイルのパスを指定すると、コマンドが実行される
-
「結果:0」が表示され、Composerのロゴが表示されていることを確認する
この画面が返ってくれば、Composerコマンドが使用できる状態です
phpファイルの$command
の内容に、ライブラリを記載して実行すれば、ライブラリをインストールできます。
-
twitteroauthをインストールする例
<pre> <?php $command = 'export HOME="/root"; php composer.phar require abraham/twitteroauth'; exec($command . ' 2>&1', $output, $result); echo '実行したコマンド:' . $command . '<br>'; echo '結果:' . $result . '<br>'; print_r($output); ?> </pre>
「結果:0」が表示され、「composer.json」「composer.lock」ファイルと、「vendor」フォルダの中にabraham/twitteroauthのファイル群が作成されていればインストールは完了です。
おわりに
SSH接続できないレンタルサーバーで、Composerコマンドを使ったライブラリのインストール方法がわからず、かなりハマってしまいました。
が、結果的にはComposer経由でライブラリをインストールする必要はなかったので無駄作業になってしまいました。
供養の意味もこめて手順をまとめました。誰かの役に立ちますように…。