ワードプレスからPHPでシェルのコマンドを実行する方法(bash等)
doudonn 更新日:
PHPでシェルのコマンドを実行!
同期の「rsync」なんかはPHPから実行するのが楽です。
ワードプレスから実行する方法を紹介。
1、実現したいこと
固定ページを開くと「page-100.php」が起動し、
それがシェルコマンドを実行するという流れです。
自分はこのやり方が好きなので多用しています。
2、シェルを実行するPHPプログラム
$cmd = "sudo rsync -a -e 'ssh -i /home/doudonn/id_ed25519 -p 12222' /var/www/html/img/ doudonn@192.168.0.1:/var/www/doudonn.com/img/";
exec($cmd, $output, $result);
echo '実行結果:'.$result;
実行結果:0
「exec関数」を使います。
「$cmd」は実行するコマンド。
「$output」は実行結果が格納されます。
「$result」は実行成否(成功で0、失敗で0以外)
「rsync」の場合、実行結果を取得したいなら「vオプション」を付けてください。
一応rsyncの解説を。
$cmd = "sudo rsync -a -e 'ssh -i 秘密鍵のパス -p 同期先のポート番号' 同期元フォルダ 同期先サーバーのユーザー名@同期先サーバーのIPアドレス:同期先のフォルダ";
3、shell_exec関数でも実現できる
$cmd = "sudo rsync -a -e 'ssh -i /home/doudonn/id_ed25519 -p 12222' /var/www/html/img/ doudonn@192.168.0.1:/var/www/doudonn.com/img/";
shell_exec($cmd);
「実行成否」が必要ない場合、「shell_exec関数」でもOKです。
これはただコマンドのみを入れる関数。
実行結果をそのまま全て取得してくれます。
「echo shell_exec($cmd);」という感じで表示できる。
一応はエラー有無を確認した方が良いと思うので、
exec関数を使うことをおすすめします。
4、注意点
ワードプレスでやる場合、実行ユーザーはApacheやNginxです。
そのため基本的には「sudo」を付けて、「visudo」でパスワード不要にする必要がある。
こんな感じにvisudoに記載します。
nginx ALL=(ALL) NOPASSWD: /usr/bin/rsync
ユーザー「nginx」はrsyncコマンドはパスワード不要という意味です。
このあたりは自分の環境に合わせて対応ください。