Sun, iPlanet, Netscape サーバ(Sun Solaris 用)

このセクションでは、Sun Solaris 上の Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server に PHP をインストールする際の 手引きと注意事項について説明します。

PHP 4.3.3 より、NSAPI モジュール を使って 独自エラーページ および ファイル一覧表示ページの生成 が可能です。 Apache 互換の関数も追加されています。 また、これらの Web サーバについての サブリクエストに関する注意 も参照してください。

Netscape Enterprise Server (NES) への PHP のインストールに関しては http://benoit.noss.free.fr/php/install-php4.html にも情報があります。

Sun JSWS/Sun ONE WS/iPlanet/Netscape Web サーバ用に PHP をビルド するには、--with-nsapi=[DIR] オプションに適切なインストールディレクトリを指定してください。 デフォルトのディレクトリは、通常、/opt/netscape/suitespot/ です。 /php-xxx-version/sapi/nsapi/nsapi-readme.txt も参照してください。

  1. 以下のパッケージを、 http://www.sunfreeware.com/ や他のダウンロードサイトから取得し、 インストールします。

    autoconf-2.13
    automake-1.4
    bison-1_25-sol26-sparc-local
    flex-2_5_4a-sol26-sparc-local
    gcc-2_95_2-sol26-sparc-local
    gzip-1.2.4-sol26-sparc-local
    m4-1_4-sol26-sparc-local
    make-3_76_1-sol26-sparc-local
    mysql-3.23.24-beta (mysql サポートが必要な場合)
    perl-5_005_03-sol26-sparc-local
    tar-1.13 (GNU tar)

  2. パスを適切に設定します ( PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin )。 そして、export PATHとし、パスを有効にします。

  3. gunzip php-x.x.x.tar.gz (.gz 配布の場合のみ)

  4. tar xvf php-x.x.x.tar

  5. PHP を展開したディレクトリに移動します cd ../php-x.x.x

  6. 以下のステップを実施します。 /opt/netscape/suitespot/ は netscape サーバがインストールされている場所です。 異なる場合は、適切なパスに変更してください。
    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc

  7. make を実行し、その後 make install を実行します。

基本インストールを実行したら、適当な readme ファイルを参照してください。 いくつかの追加インストール手順を実行する必要があるかもしれません。

Sun/iPlanet/Netscape の設定手順. まず、共有ライブラリの探索のために、環境変数 LD_LIBRARY_PATH にパスをいくつか追加する必要があります。 Webサーバの開始スクリプトで行うのが最善でしょう。 開始スクリプトは、通常 /path/to/server/https-servername/start にあります。 また、/path/to/server/https-servername/config/ にある設定ファイルの編集も必要です。

  1. mime.typesに次の行を追加します (administration server で行えます。)
    type=magnus-internal/x-httpd-php exts=php

  2. magnus.conf (サーバ>= 6の場合) または obj.conf (サーバ< 6の場合) を編集し、 以下の行を追加します。 ここで、shlib はシステムにより異なります。 /opt/netscape/suitespot/bin/libphp4.so 等となるでしょう。 mime types init の後に置いてください。
    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
    (PHP >= 4.3.3) php_ini パラメータはオプションですが、 これを指定することにより、Web サーバの設定ファイルがあるフォルダに php.ini を置くことが可能になります。

  3. obj.conf のデフォルトオブジェクトを設定します (バージョン 6 以降の仮想サーバの場合は vserver.obj.conf。)
    <Object name="default">
    .
    .
    .
    .#NOTE this next line should happen after all 'ObjectType' and before all 'AddLog' lines
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    (PHP >= 4.3.3) 追加のパラメータとして、いくつかの特別な php.ini 値を 追加することができます。例えば、コンテキスト php4_execute に対して docroot="/path/to/docroot" を設定するなどです。 また、論理値の場合、0/1 を値として使用してください。 "On","Off",... では正しく動作しません。 例えば、zlib.output_compression="On" ではなく、 zlib.output_compression=1 とします。

  4. 以下は、(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>
    こうしておくと、Administration Server に特定のディレクトリを設定し、 これをスタイル x-httpd-php に割り付けることができます。 このディレクトリの中にあるすべてのファイルは PHP スクリプト として実行されます。 これは、ファイルの拡張子を .html に変更し、 PHP が使用されている事を隠したい場合に有用です。

  5. 認証を設定します。PHP による認証は他の認証と併用することはできません。 すべての認証は、PHP スクリプトに渡されます。 サーバ全体に対して PHP 認証を設定する場合は、以下の行を追加してください。
    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>

  6. 単一のディレクトリでのみ PHP による認証を行う場合は、次の行を追加します。
    <Object ppath="d:\path\to\authenticated\dir\*">
    AuthTrans fn=php4_auth_trans
    </Object>

注意: PHP が使用するスタックサイズは Web サーバの設定に依存します。 非常に大きい PHP スクリプトを実行させた際にクラッシュが発生する場合は、 Administration Server でスタックサイズ("MAGNUS EDITOR") を大きくすると良いでしょう。

CGI 環境変数と php.ini の変更

Sun JSWS/Sun ONE WS/iPlanet/Netscape がマルチスレッドの Web サーバだという事が PHP スクリプトを書く際に重要になります。すべてのリクエストは同一の (Web サーバ自体の)プロセス空間で実行され、そのプロセス空間は 1 つの環境変数しか 持っていません。PATH_INFO や HTTP_HOST などの CGI 変数を取得する場合、 PHP 3.x で行っていたような古い方法、つまり getenv() 関数を使用する方法や他の同等な方法 (グローバル変数の登録機能、 $_ENV 等)を使うのは正しい方法ではありません。 Web サーバの環境変数をただ単に取得するだけと、 正しい CGI 変数は得られないのです。

注意: なぜ正しくない CGI 変数が登録されているのでしょうか?

それは、Web サーバのプロセスを Administration Server から起動させる際、 Web サーバの起動スクリプトが CGI スクリプトとして実行されるためです。したがって、 起動された Web サーバの環境変数には CGI 変数も含まれることになります。 Administration Server 以外から Web サーバを起動してみればこのことをテストできるでしょう。 ルートユーザでコマンドラインを使って、手動で起動してみると、CGI 変数らしき 環境変数が登録されないことが確認できるでしょう。

PHP 4.x のスクリプトで CGI 変数を取得する場合は、スーパーグローバル $_SERVER を用いるのが正しい方法です。また、$HTTP_HOST などを使う古いスクリプトを使用する場合は、php.iniregister_globals をオンにし、変数のパースの順番 (variables_order) を変更してください ("E" を削除。環境変数を読み込む必要は無いため。)
variables_order = "GPCS"
register_globals = On

独自エラーページおよびファイル一覧表示ページ (PHP >= 4.3.3)

PHP を使って、"404 Not Found" などに対するエラーページを生成することが できます。オーバーライドしたいすべてのエラーページ対して、以下の行を obj.conf 中のオブジェクトに追加してください。
Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
ここで、XXX は HTTP のエラーコードです。 追加したものと干渉する Error ディレクティブは削除してください。 発生するすべてのエラーに対応するページを設定したい場合は、 code パラメータを省略してください。スクリプトで HTTP ステータス コードを取得するには、 $_SERVER['ERROR_TYPE'] を使用します。

独自のファイル一覧表示ページを PHP を使って生成することも可能です。 ファイル一覧表示を行う PHP スクリプトを作成し、obj.conftype="magnus-internal/directory" の行に 書かれているデフォルトのサービスを以下のように置き換えます。
Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
エラーページ、ファイル一覧表示ページのいずれでも、元の URI および 変換後の URI は、それぞれ、$_SERVER['PATH_INFO'] および $_SERVER['PATH_TRANSLATED'] に格納されます。

nsapi_virtual() および サブリクエストに関する注意 (PHP >= 4.3.3)

NSAPI モジュールは、現在、nsapi_virtual() 関数 (エイリアス: virtual()) をサポートしており、 Web サーバへサブリクエストを行い、結果を Web ページへ挿入することができます。 ただし、この関数は NSAPI ライブラリの文書化されていない機能を若干使用しています。 モジュールは、自動的に必要な関数群を探し、可能であればそれらの関数を 使用ます。もし使用可能でなければ、nsapi_virtual() 関数は 使用不可となります。

注意: nsapi_virtual() サポートは「実験的」な機能です。