PHPをコマンドラインで使う

 通常のスクリプト言語と同じように、PHPをコマンドラインで解釈実行するツールは、 バージョン4.2.0から実験的にサポートされ、4.3.0からは正式に使えるようになりました。 これはCLI(Command Line Interface)と呼ばれ、CGIとは別物です。

 Windowsでは、php.exeがPHPをコマンドラインで解釈実行するのに使われます。 下のようなサンプルスクリプト(拡張子は何でもよいと思いますが、.phpとします)を作り、 「C:\php5\php.exe sample.php」のような形で実行します。

#!/usr/local/bin/php -q
<?php
// argvはスクリプト名自身も含みます。
$ds1 = $argv[1];
$ds2 = $argv[2];
$da1 = array();
if(! preg_match("/^(\d\d\d\d)(\d\d)(\d\d)/", $ds1, $da1)){
    die("date1 $date1 unrecognized, expected YYYYMMDD.\n");
}
if(! preg_match("/^(\d\d\d\d)(\d\d)(\d\d)/", $ds2, $da2)){
    die("date2 $date2 unrecognized, expected YYYYMMDD.\n");
}
$date1 = mktime(0, 0, 0, $da1[2], $da1[3], $da1[1]);
$date2 = mktime(0, 0, 0, $da2[2], $da2[3], $da2[1]);
$dates = abs($date1-$date2) / (24*60*60);
print "dates=$dates\n";
// end.
?>

 コマンドラインから実行するスクリプトも、 HTML以外のスクリプトの部分は「<?php ?>」で囲む必要があります。 但し、1行目はUNIX環境で効く例の「おまじない」です。 (意味が分からない場合は飛ばしてください)phpコマンドの-qオプションは、 専らコマンドラインアプリケーションとして使う場合につけるオプションで、 HTTPヘッダを出力しないというオプションです。
 コマンドラインには当然コマンドライン引数を指定することができます。 それはC言語と同様、変数$argcと$argvで参照できます。 これまたC言語と同様、$argv[0]はスクリプトの名前で、 本当の引数は[1]からです。

 その他、コマンドラインPHPについての詳しい説明は、 こちらにあります。


標準入力はどうやって指定するの?

 コマンドライン版PHPでは、通常のプログラミング言語と同様、 標準入力から文字を読ませることも可能です。 下はそのサンプルです。fopen関数の引数をこのようにすればOKです。 その前に、set_time_limit(0)で、処理時間の制限(タイムリミット)を解除しておくのも重要です。 下の例では、"exit"という文字が入力されるまでループすることで、 対話的なコマンドライン・アプリケーションをPHP言語を利用して作っています。

set_time_limit(0);
($stdin = fopen("php://stdin", "r")) || die("Cannot open stdin.");
for(;;){
    print(">");
    $s = trim(fgets($stdin, 256));
    if ($s == "exit") {
        break;
    } else {
        print $s;
    }
}

Open Source Web Architecture Top

(first uploaded 2004/09/05 last updated 2005/03/20, URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル