Linuxなどのメモ書き

PHP CLI/CGI SAPI


概要

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ヘッダを出力しない。

test.php
<?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が生成される。

CGI版を作成するconfigure
# ./configure

# ./configure --enable-cgi

# ./configure --enable-cgi --with-apxs2=/usr/sbin/apxs
--with-apxs2が指定されていると--enable-cgiを指定しても
CLI版が作成されるので注意


CLI/CGI版を両方インストールしたい場合、configure&makeをCLI/CGIでそれぞれ行う必要がある。また、その場合はファイル名がぶつかって上書きされてしまわないように--program-suffixを指定するとよい。

CLI版(+Apacheモジュール)のコンパイル
# ./configure --with-apxs2=/usr/sbin/apxs
# make
# make install
/usr/local/bin/phpがインストールされる。

# make clean

CGI版のコンパイル
# ./configure --enable-cgi --program-suffix=.cgi
# make
# make install
--program-suffixで.cgiを指定しているので
/usr/local/bin/php.cgiという名前でインストールされる

関連ページ



最終更新 2007/07/12 12:37:30 - kztomita
(2007/07/12 00:53:00 作成)


リンク

その他のWiki
Linuxメモ
Xnuメモ

会社
(有)ビットハイブ
受託開発やってます。

よくやる仕事

・Webシステム開発(LAMP環境)
・Linuxサーバー設定関連
サーバー移転作業代行

開発事例にデジタルカタログ/マンガビューワーを追加しました。

draggable.jsのスマホ対応版デモページを追加しました。説明はこちら

検索

Adsense
最近のコメント