doudonn WEB制作やサーバーの話とかいろいろ

ワードプレスからPHPでシェルのコマンドを実行する方法(bash等)

doudonn 更新日:
ワードプレスからPHPでシェルのコマンドを実行する方法(bash等)

PHPでシェルのコマンドを実行!

同期の「rsync」なんかはPHPから実行するのが楽です。
ワードプレスから実行する方法を紹介。

1、実現したいこと

ワードプレスでPHPでシェルのコマンドを実行して同期する方法

固定ページを開くと「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コマンドはパスワード不要という意味です。
このあたりは自分の環境に合わせて対応ください。

--

PHP全般の関連記事

記事一覧はこちら:PHP全般

管理人について
doudonn
名前:doudonn(どうどん)
ひたすらWEB制作な人。
一応社長です。音ゲー好き

<Twitterはこちら>
ゲーム垢
WEB制作垢
お知らせ

2022年11月30日に全記事削除しました。
まだ再開に向け作りかけ。


無駄にページ表示速度にこだわってます。

役立ちサイト
wiki
© 2022-2023 doudonn All Rights Reserved.