PHP CLI/CGI SAPI
Rev.6を表示中。最新版はこちら。
概要
phpコマンドにはCLI版(CLI SAPI)とCGI版(CGI SAPI)がある。これらはそれぞれシェル(コマンドライン)アプリケーション向け、CGIとしての実行向けになっており動作が異なる。これらはconfigure時に指定したオプションによってどちらかがインストールされる(*1)。
現在のコマンドがどちらのものかは-vオプションで確認できる。# php -v
PHP 5.1.6 (cli) (built: May 9 2007 11:47:50)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
(*1) オプションによってはmake時に両方コンパイル(sapi/cli/php,sapi/cgi/php)される場合もあるが、make installでインストールされるのは片方のみ。
動作の違い
CLI/CGI版の大きな違いは、コマンド実行時にHTTPヘッダを出力するか否か。
CLI版はコマンドラインからの実行向けにコマンド実行時にHTTPヘッダを出力しない。
<?php print "foo\n"; ?>
CLI SAPIでのtest.php実行結果
# php test.php foo
CGI版はコマンド実行時にHTTPヘッダが自動で出力される。ヘッダが自動で出力されるのでCGI実行時にスクリプト内でprint "Content-Type: text/html\n\n"; のように手動でヘッダを出力する必要がない。
CGI SAPIでのtest.php実行結果
# php test.php X-Powered-By: PHP/4.4.7 Content-type: text/html foo
configureの仕方
CLI版を作成したい場合は、configure時に--disable-cgiもしくは--with-apxs2=/usr/sbin/apxsを指定すればよい。
CLI版を作成するconfigure
# ./configure --disable-cgi
# ./configure --with-apxs2=/usr/sbin/apxs <== apache用moduleも作成
上記以外のケースだとCGI版を作成するmakefileが生成される。
# ./configure # ./configure --enable-cgi # ./configure --enable-cgi --with-apxs2=/usr/sbin/apxs --with-apxs2が指定されていると--enable-cgiを指定しても CLI版が作成されるので注意