コマンドライン(Bash/Shell)からPHPを実行する方法
本記事では、BashシェルやコマンドラインからPHPを利用する方法を、具体例とともにわかりやすく解説します。
PHPは通常、Webサイトで配信するコンテンツを生成するために使われる言語ですが、実はコマンドラインからも実行することができます。
コマンドラインからのPHP実行は、主にテストやPHP環境情報の確認といった目的で行われます。また、PHPを使ってコマンドライン用のスクリプトを作成することも可能です(ただし、より適した代替手段が存在するため、実際にはあまり頻繁には行われていません)。
シェルからPHPコマンドを直接実行する
PHPのコードは、-r(run)オプションを使うことで、コマンドラインから直接実行できます。
php -r 'phpinfo();'
上記の例では、phpinfo()関数を呼び出しています。複数行のコードをセミコロンで区切って渡すこともできますし、ヒアドキュメント(複数行のBash変数)をパイプで入力することも可能です。
パラメータ(引数)の受け渡し
コマンドラインからPHPを実行する際には、$argv変数を使ってパラメータ(引数)を受け渡せます。
php -r 'echo $argv[1]; echo $argv[2];' "foo" "bar"
上記の例では、1つ目のパラメータが$argv[1]、2つ目のパラメータが$argv[2]として参照されます。
$argvは配列であり、PHPがコマンドラインから呼び出された場合にのみアクセスできます。配列の先頭要素にはスクリプトの実行に使われたPHP実行ファイルの名前が格納され、以降の要素には渡された順番に従ってパラメータが格納されます。
スクリプトファイルを実行する
PHPファイルは、ファイルへのパスを指定することで、コマンドラインから実行できます。
php script.php
または次のように指定します。
php -f script.php
-fオプションは必須ではありませんが、可読性や明確さのためにあえて指定することもあります。
PHPのコマンドラインオプションの一覧については、公式ドキュメントをご参照ください。
パラメータ(引数)の受け渡し
コマンドラインから直接PHPを実行する場合と同様に、スクリプトファイルをコマンドラインから実行する際にも、$argv配列を使って同じ方法でパラメータにアクセスできます。
コマンドラインからの実行かどうかを判定する
$argvと同様に、$argcもコマンドラインからの実行時にのみ存在する変数です。$argcには、スクリプトへ渡されたパラメータ(引数)の個数が格納されます。
つまり、$argcが存在しているかどうかをチェックすれば、スクリプトがコマンドライン上で実行されているかどうかを判定できます。
if (isset($argc)) {
// PHPがコマンドラインから呼び出された場合の処理
}
STDIN/STDOUTとPHP
PHPは他のコマンドラインアプリケーションと同様に、標準のリダイレクションを使ってコマンドへのデータ入力や出力結果の処理を行えます。
echo 'Green trees' | php -r 'echo file_get_contents("php://stdin");'
上記の例では、「Green trees」というテキストがPHPへパイプされ、PHPがSTDINからその内容を読み取ってそのまま出力しています。
-
Bashのsleepコマンド徹底解説 – シェルスクリプトをN秒間待機させる方法(実行例付き)
シェルスクリプトを書いていると、処理を進める前に一定時間待機させたい場面に出くわすことがあります。たとえば、あるプロセスの完了を待ちたい場合や、失敗したコマンドを再試行する前に間隔を空けたい場合などがその代表例です。そんなときに役立つのが、シンプルで扱いやすい sleep コマンドです。Bashのsleepコマンドの基本的な使い方sleep コマンドは非常に汎用性が高く、構文もとてもシンプルです。使い方は sleep N と入力するだけ。これだけでスクリプトは N 秒間一時停止します。N には正の整数または小数(浮動小数点数)を指定できます。まずは基本的な例を見てみましょう。echo Hell
-
楽しく学べる!Bash習得に役立つコマンドラインゲーム3選
学習は大変な作業であり、誰も「作業」そのものは好きではありません。つまり、Bashがどれだけ習得しやすい言語だとしても、やはり「勉強」という感覚を拭いきれないかもしれません。しかし、ゲームを通して学ぶなら話は別です。 ターミナルの使い方を教えてくれるゲームなど、そう多くは存在しないと思うでしょう。実際、その通りなのです。PCゲーマーならご存知の通り、FalloutシリーズにはVault内にターミナル式のコンピュータが登場し、テキストでコンピュータと対話するという概念に自然と親しめるようになっています。AlpineやEmacsに似たアプリケーションも登場しますが、残念ながらFalloutをプレイ