このセクションでは、Windows 上の Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server で PHP を使用する場合について説明します。
PHP 4.3.3 より、NSAPI モジュール を使って 独自エラーページ およびファイル一覧表示ページの生成 が可能です。 Apache 互換の関数も追加されています。 また、これらの WEB サーバ専用の機能については、 「サブリクエストに関する注意」 をお読みください。
CGI 版の PHP を使用する場合は、以下のようにしてください。
コマンドラインからファイルの関連付けを行います。 次の 2 行をタイプしてください。
assoc .php=PHPScript ftype PHPScript=c:\php\php.exe %1 %*
CGI 版の PHP を使用する場合の詳細な説明は » http://benoit.noss.free.fr/php/install-php.html を参照してください。
NSAPI 版の PHP を使用する場合は、以下のようにしてください。
コマンドラインからファイルの関連付けを行います。 次の 2 行をタイプしてください。
assoc .php=PHPScript ftype PHPScript=c:\php\php.exe %1 %*
magnus.conf (サーバ>= 6の場合) または obj.conf (サーバ< 6の場合)を編集し、 以下の行を追加します。 この行は mime types init の後に記述する必要があります。
Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll" Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_ini="c:/path/to/php.ini"]
obj.conf のデフォルトオブジェクトを設定します (仮想サーバの場合、vserver.obj.conf のクラス [SunONE 6.0]。) < Object name="default" > セクションに 次の行を追加してください。この行は、 'ObjectType' の後、'AddLog' の前に記述してください。
Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
以下は、(cgi-bin ディレクトリ のように)PHP スクリプトのみからなるディレクトリを設定したい場合にだけ必要です。
<Object name="x-httpd-php"> ObjectType fn="force-type" type="magnus-internal/x-httpd-php" Service fn=php4_execute [inikey=value inikey=value ...] </Object>
注意:
NSAPI 版の PHP の使用についてのより詳細な説明は » http://benoit.noss.free.fr/php/install-php4.html をご覧ください。
注意:
PHP が使用するスタックサイズは WEB サーバの設定に依存します。 非常に大きい PHP スクリプトを実行させた際にクラッシュする場合は、 Administration Server でスタックサイズ("MAGNUS EDITOR") を大きくすると良いでしょう。
Sun JSWS/Sun ONE WS/iPlanet/Netscape がマルチスレッドの WEB サーバだという事が PHP スクリプトを書く際に重要になります。すべてのリクエストは同一の (WEB サーバ自体の)プロセス空間で実行されます。PATH_INFO や HTTP_HOST などの CGI 変数を取得する場合、 古い PHP で行っていたような方法、つまり getenv() 関数を使用する方法や他の同等な方法(グローバル変数の登録機能、 $_ENV 等)を使うのは正しい方法ではありません。WEB サーバの環境変数をただ単に取得すると、 正しい CGI 変数は得られません。
注意:
なぜ正しくない CGI 変数が登録されているのでしょうか?
それは、WEB サーバのプロセスを Administration Server から起動させる際、 WEB サーバの起動スクリプトが CGI スクリプトとして実行されるためです。したがって、 起動された WEB サーバの環境変数には CGI 変数も含まれることになります。 Administration Server 以外から WEB サーバを起動してみればこのことをテストできるでしょう。 ルートユーザでコマンドラインを使って、手動で起動してみると、CGI 変数らしき 環境変数が登録されないことが確認できると思います。
PHP 4.x のスクリプトで CGI 変数を取得する場合は、スーパーグローバル $_SERVER を用いるのが正しい方法です。また、$HTTP_HOST などを使う古いスクリプトを使用する場合は、php.ini で register_globals をオンにし、変数のパースの順番 (variables_order) を変更してください ("E" を削除。環境変数を読み込む必要は無いため。)
variables_order = "GPCS" register_globals = On
PHP を使って、"404 Not Found" などに対するエラーページを生成することが できます。オーバーライドしたいエラーページすべてに対して、以下の行を obj.conf 中のオブジェクトに追加してください。
Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
独自のファイル一覧表示ページを PHP を使って生成することも可能です。 ファイル一覧表示を行う PHP スクリプトを作成し、obj.conf の type="magnus-internal/directory" の行に 書かれているデフォルトのサービスを以下のように置き換えます。
Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
NSAPI モジュールは、現在、nsapi_virtual() 関数 (エイリアス: virtual()) をサポートしており、 WEB サーバへサブリクエストを行い、結果を WEB ページへ挿入することができます。 問題としては、この関数は 文書化されていない NSAPI ライブラリの機能を使用して いることにあります。
Unix では、モジュールは自動的に必要な関数群を探し、可能であればそれらの関数を 使用するため、特に問題はありません。もし使用可能でなければ、nsapi_virtual() は 使用不可となります。
Windows では、DLL の扱いに制限があるため、自動認識の使用には 最新の ns-httpdXX.dll ファイルが必要です。 バージョン 6.1 までテストが行われています。もし、より新しい Sun サーバを使う場合は、 自動認識が動作せず、nsapi_virtual() が使用不可となる可能性が あります。
もしそういった事になった場合は、 magnus.conf/obj.conf の php4_init へ以下のパラメータを追加してください。
Init fn=php4_init ... server_lib="ns-httpdXX.dll"
ステータスは phpinfo() 関数を使って確認できます。
注意:
nsapi_virtual() サポートは「実験的」な機能です。