PHPを使っているサーバーはLinuxが圧倒的に多いと思いますが、最近は別のサーバーAPIと連携したり、サーバー内の別モジュールとのデータ連携をしたりするケースが増えてきました。
そんな時、PHPでターミナルコマンドを実行して返り値を受け取ることで便利にWEBツールを作ると、開発工数などもかなり抑えられて作業を進めることができます。
systemコマンド
「system」「exec」でコマンドラインを実行することができますが、返り値を受け取ることを考えるとexecを使うことをオススメします。
簡単な使い方
unset($res);
exec("ls -la",$res);
echo join("
",$res);
注意点
1. $resは、execで上書きされずに、追記されるので、直前にunsetして、情報を初期化する事
2. 受け取った$resは、配列で返るため、単一の値であっても、配列として扱いましょう。
3. execで実行されるコマンドのディレクトリは、実行しているphpが配置されている場所が基本になる。
サンプル
実行はブラウザでアクセスしてください。
特定ファイル内の文字データを取得する
1,aaa,test
0,aaa,test
1,bbb,test
1,ccc,test
unset($res);
exec("aws -F, '{if($1==1){print $0}}' hoge.txt",$res);
echo join("
",$res);
1,aaa,test
1,bbb,test
1,ccc,test
phpでテキストファイルを読み込んで処理をしてもいいのですが、UIスピードは、コマンドのcatやgrepやawkなどが圧倒的に早いので、大容量テキストを扱う場合などはこういった方法をオススメします。
外部サイトのソースを取得する
unset($res);
exec("wget http://www.yahoo.co.jp/",$res);
echo join("<br />",$res);
指定したURLのページが表示されます。
file_get_contentsを使ってurlからソースを取得してもいいのですが、wgetコマンドのオプションで便利なものが大量にあるので、phpで処理するよりもはるかに便利な場合が多いです。
Linux以外のOSでの利用
windowsの場合はxampを使ったりiisを使ったりすると思いますが、linuxのsystemコマンドと違う為、今回の対象とは外させてもらいます。
macの場合は、brewなどを使って、linuxと近い環境に持って行くことはできますが、たま〜にびみょ〜に違うことがあり、調べるのに時間を使うことが多いので、
windowsもmacも、vagrantなどを使ってlinuxで作業するようにしてください。
注意点
当たり前ですが、「php.ini」に、exec命令を禁止していると、今回の記事は全て有効に使えないので、以下を確認しておいてから実行してください。
# 特定の関数を無効にするための設定
disable_functions = phpinfo, eval, system, exec, passthru, popen
エンジニアが複数使うようなPHPファイルを配置するサーバーの場合はセキュリティ対策としてexecは利用不用にするほうがいいので、その場合は、プラグインやAPIなどを駆使してください。
0 件のコメント:
コメントを投稿