付録 BコマンドラインからPHPを使う

PHPコマンドライン版は、デバッグ時やPHPの設定をテストしたいような場 合には便利であるばかりでなく、Webスクリプト作成以外の用途にPHPを使 用したい場合には、便利な選択肢です。

PHP実行ファイルの出力を外部ファイルに>文字で常にリダイレクトでき、 このため、php -q test.php > test.htmlは、 test.phpの出力をHTTPヘッダを付加せずに同じディ レクトリのtest.htmlファイルに出力します。

コマンドライン版は、PHP実行ファイルがある場合にのみ使用可能です。サー バモジュール版を構築し、CGI版が使用するマシンで利用可能でない場合、 使用することはできません。Windowsユーザの場合、PHP実行ファイルとサー バモジュールが共にバイナリパッケージに入っています。実行ファイルの 名前は、php.exeです。

以下にPHP 4.0.6に関するコマンドラインオプションを示します。 -h オプションを使用することにより、実際のリスト とその簡単な説明を得ることが可能です。php -h の 出力は、以下のようになります。
Usage: php [-q] [-h] [-s [-v] [-i] [-f <file>] |  {<file> [args...]}
  -q             Quiet-mode.  Suppress HTTP Header output.
  -s             Display colour syntax highlighted source.
  -f <file>      Parse <file>.  Implies `-q'
  -v             Version number
  -C             Do not chdir to the script's directory
  -c <path>      Look for php.ini file in this directory
  -d foo[=bar]   Define INI entry foo with value 'bar'
  -e             Generate extended information for debugger/profiler
  -z <file>      Load Zend extension <file>.
  -l             Syntax check only (lint)
  -m             Show compiled in modules
  -i             PHP information
  -h             This help

以下に最も重要なコマンドラインオプションのいくつかについて詳細な解 説を行います。

表 B-1コマンドラインオプション

オプション説明
-q HTTPヘッダ出力を抑制します。通常、PHPはコールするプログラム(す なわちWebサーバ)がブラウザに出力するようにHTTPヘッダを出力しま す。コマンドラインアプリケーションを作成する場合には、これらの ヘッダは意味がありません。
-s ファイル名で指定されたファイルをカラーハイライト表示にして出力 します。これは、PHPスクリプトでソースコードを highlight_file()により出力するのと同じです。
-f 与えられたファイルを解析し、文法上のミスや致命的なエラー を探します。このオプションが指定されると自動的に -q が 指定されたものと見なされます。デバッグに使用してください。
-v このオプションを付けてPHPをコールすると、バージョン番号、すな わち、4.0.6を知ることができます。
-C 通常、PHPは作業ディレクトリをスクリプトがあるディレクトリに変 更します。これにより、例えばファイル名を指定するだけで同じディ レクトリにあるファイルをオープンすることが可能となります。 このディレクトリ変更を無効にしたい場合はこのオプションを使用し て下さい。
-c このオプションを使用すると、別のphp.ini のパスを指定することが可能です。この場合、PHPは、デフォルトの パスの代わりに指定したパスで設定ファイルを探します。
-d このオプションを付けることにより、スクリプト実行時に、個々の php.ini設定を設定することが可能です。
-l 与えられたファイルの文法をチェックします。このオプションが 指定されると自動的に -q も指定されたものと見なされます。 デバッグに使用してください。このオプションでは(定義されて いない関数といった)致命的なエラーを探し出すことはしません。 致命的なエラーも探し出したい場合は -f を使用してください。
-m このオプションにより、組み込まれた(そしてロードされた)PHPモジュー ルおよびZendモジュール、PHPおよびZendのバージョン番号、Zendの 著作権の簡略版を出力します。
-i このコマンドラインオプションは、phpinfo()を コールし、結果を出力します。PHPが正しく動作しない場合、 php -iを実行し、情報テーブルの前または中に 出力されているエラーメッセージを確認して下さい。
-h このオプションを付けると、実際のコマンドラインオプション及びそ の簡単な説明を得ることができます。

PHPの実行形式を使えばPHPをスクリプトをウェブサーバから完全に 独立させて実行することが出来ます。Unixシステム上では、PHP スクリプトの先頭に特別な1行を追加することで、そのスクリプトを 実行するのに必要なプログラムをシステムに知らせることができるので そのスクリプト自体を実行可能形式とすることが出来ます。Windows システム上では、php.exe -q.php ファイルに関連付けるか、PHPを使ってスクリプトを実行する バッチファイルを書くことが出来ます。Unixでの実行のために付加された 最初の1行はWindows上での実行時にも問題となることはありませんので クロスプラットフォームなスクリプトを書くことが出来ます。コマンド ライン用PHPプログラムの単純な例は以下のようなものです。

例 B-1コマンドライン実行用に作成されたスクリプト(script.php)

#!/usr/bin/php -q
<?php

if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>

これは、オプションが1つあるコマンドライン版のPHPスクリプトです。

  使用法:
  <?php echo $argv[0]; ?> <option>

  <option> に出力したい何らかの単語を指定できます。
  --help, -help, -h, -? オプションを指定するとこのヘルプが表示されます。

<?php
} else {
    echo $argv[1];
}
?>

上記のスクリプトではファイルがPHPによって実行され、またHTTPヘッダを 出力しないことを示す特別な1行目を使用しています。PHPのコマンドライン版 アプリケーションを書くとき、以下の2つの変数を使用することが出来ます: $argc$argvです。1番目の変数は 引数の数に1を足した数(実行中のスクリプト名)です。2番目の変数は引数を 格納した配列です。配列はスクリプト名を格納した0($argv[0] )から始まります。

上記のプログラムは、引数の数が1未満か1より多いかどうかをチェック しています。また、もし引数が--help, -help , -hもしくは--help だったら動的にスクリプト名を表示し、ヘルプを出力します。もし他の 引数を受け取ったらそれを表示します。

もし上記のスクリプトをUnixで実行するなら、ファイルに実行権限を与え、 単純に script.php echothisもしくはscript.php -h というように実行します。Windowsでは、バッチファイルを書く ことで同様のことが行えます:

例 B-2 コマンドライン版PHPスクリプトを実行するバッチファイル(script.bat)

@c:\php\php.exe -q script.php %1 %2 %3 %4

上記のプログラムをscript.phpという名前にしたとして、 またphp.exec:\php\php.exeに あるとするとこのバッチファイルはscript.bat echothis もしくはscript.bat -hといったオプションを追加して 実行することが出来ます。

コマンドラインで動作するPHPアプリケーションを書く際に有用となる関数に ついてはReadline拡張モジュールの ドキュメントを参照してください。