## 古い Windows システムへのインストール

本章は、Windows 98/Me および Windows NT/2000/XP/2003 に適用されます。 PHP は、Windows 3.1 などの 16 ビットのプラットフォームでは動作しません。 PHP がサポートする Windows プラットフォーム を Win32 と呼ぶことがあります。

> 注意:

> Windows XP/2003 は、PHP 5.5.0 以降サポートされなくなりました。

> 注意:

> Windows 98/Me/NT4/2000 は、PHP 5.3.0 以降サポートされなくなりました。

> 注意:

> Windows 95 は、PHP 4.3.0 以降サポートされなくなりました。

Microsoft Visual Studio などの開発環境を持っていれば、オリジナルのソースコードから PHP を ビルドすることも可能です。

Windows システムに PHP をインストールした後、機能を追加するために 拡張モジュールのロード が必要な場合があります。

### 手動でのインストール

この節では、Microsoft Windows 環境に PHP を手動でインストールして設定する方法を説明します。

#### PHP 配布パッケージの選択とダウンロード

PHP バイナリの zip 版を » PHP for Windows: Binaries and Sources からダウンロードします。zip パッケージにはいくつかのバージョンがあります。 適切なバージョンを選ぶための詳細な指針が、 » ダウンロードページ にあるので、それに従いましょう。

#### PHP パッケージの構造と内容

zip パッケージを、たとえば C:\PHP\ などのお好みの場所に展開しましょう。 zip を展開した中身は、次のようになります。

例1 PHP 5 パッケージ構造

    c:\php
       |
       +--dev
       |  |
       |  |-php5ts.lib                 -- 非スレッドセーフバージョンの場合は php5.lib
       |
       +--ext                          -- PHP 拡張モジュールの DLL
       |  |
       |  |-php_bz2.dll
       |  |
       |  |-php_cpdf.dll
       |  |
       |  |-...
       |
       +--extras                       -- 空
       |
       +--pear                         -- PEAR の初期コピー
       |
       |
       |-go-pear.bat                   -- PEAR セットアップ用スクリプト
       |
       |-...
       |
       |-php-cgi.exe                   -- CGI 実行ファイル
       |
       |-php-win.exe                   -- コマンドプロンプトを開かずにスクリプトを実行する
       |
       |-php.exe                       -- コマンドラインの PHP 実行ファイル (CLI)
       |
       |-...
       |
       |-php.ini-development           -- デフォルトの php.ini 設定
       |
       |-php.ini-production            -- 推奨される php.ini 設定
       |
       |-php5apache2_2.dll             -- 非スレッドセーフバージョンには存在しません
       |
       |-php5apache2_2_filter.dll      -- 非スレッドセーフバージョンには存在しません
       |
       |-...
       |
       |-php5ts.dll                    -- コア PHP DLL ( 非スレッドセーフバージョンの場合は php5.dll )
       |
       |-...

PHP の zip 版に含まれているモジュールや実行ファイルの一覧をまとめました。

- go-pear.bat - PEAR セットアップスクリプト。詳細は » Installation (PEAR) を参照ください。

- php-cgi.exe - CGI 実行ファイル。PHP を IIS 上で CGI あるいは FastCGI として実行するときに使います。

- php-win.exe - PHP 実行ファイル。コマンドプロンプトを開かずに PHP スクリプトを実行します (Windows GUI を使う PHP アプリケーションなどに使います)。

- php.exe - PHP 実行ファイル。PHP スクリプトをコマンドラインインターフェイス (CLI) で実行します。

- php5apache2_2.dll - Apache 2.2.X モジュール。

- php5apache2_2_filter.dll - Apache 2.2.X フィルタ。

#### php.ini ファイルの変更

php パッケージを展開したら、php.ini-production を php.ini という名前で同じフォルダにコピーします。 必要に応じて php.ini を別の場所に置くこともできますが、 その場合は PHP 設定ファイル にあるような設定が別途必要となります。

php.ini ファイルには、PHP の設定や動作環境についての情報を記述します。 php.ini ファイルには PHP を Windows 上で動かすための設定項目が数多く用意されています。 その中には必須でないものもあります。 また、環境に合わせて指定するディレクティブも数多くあります。詳細は php.ini ディレクティブのリスト を参照ください。

必須項目

- extension_dir = <拡張モジュールのディレクトリへのパス> - extension_dir には、 PHP の拡張モジュールがあるディレクトリを指定しなければなりません。 絶対パス ("C:\PHP\ext") あるいは相対パス (i.e. ".\ext") のどちらでもかまいません。php.ini ファイルに書かれている拡張モジュールは、 extension_dir に置かなければなりません。

- extension = xxxxx.dll - 使いたい拡張モジュールがある場合は、それに対応する "extension=" を書かなければなりません。extension_dir にある拡張モジュールのうち、ここで指定したものが起動時に読み込まれます。

- log_errors = On - PHP のログ出力機能を使うと、エラーをファイルに記録したり (syslog などの) サービスに渡したりすることができます。これは 次の error_log ディレクティブと組み合わせて使います。 IIS で実行している場合は、log_errors を有効にして error_log を正しく設定しておく必要があります。

- error_log = <エラーログファイルへのパス> - error_log には、PHP のエラーを記録するファイルを絶対パスあるいは相対パスで指定しなければなりません。 このファイルは、ウェブサーバーから書き込み可能でなければなりません。 このファイルを置く場所として一般的なのは、たとえば "C:\inetpub\temp\php-errors.log" のような TEMP ディレクトリです。

- cgi.force_redirect = 0 - このディレクティブは、IIS で動かす際に必須となります。 他の多くのウェブサーバーではディレクトリセキュリティ機能を必要としますが、 これを IIS で有効にすると、Windows 上での PHP エンジンの実行に失敗します。

- cgi.fix_pathinfo = 1 - これは、CGI 仕様に従った path info に PHP からアクセスできるようにします。 IIS の FastCGI 実装では、これを設定しておく必要があります。

- fastcgi.impersonate = 1 - IIS での FastCGI には、呼び出し元のクライアントのセキュリティトークンをまねる機能があります。 これを指定すると、IIS にリクエストのセキュリティコンテキストを定義します。

- fastcgi.logging = 0 - FastCGI のログ機能は、IIS では無効にしておかねばなりません。 有効にしたままだと、すべてのクラスから発せられるあらゆるメッセージが FastCGI のエラーとみなされ、IIS が HTTP 500 を返すようになってしまいます。

オプションの項目

- max_execution_time = ## - このディレクティブでは、スクリプトの実行に費やすことのできる最大時間を PHP に伝えます。デフォルトは 30 秒です。 もし PHP アプリケーションの実行時間が長くなるのなら、このディレクティブの値を増やします。

- memory_limit = ###M - PHP プロセスが使えるメモリの量をメガバイト単位で指定します。 デフォルトは 128 で、たいていの PHP アプリケーションではこれで十分です。 複雑なアプリケーションではもう少し必要となるかもしれません。

- display_errors = Off - このディレクティブは、ウェブサーバーに返すストリームに エラーメッセージを含めるかどうかを指定します。 これを "On" にすると、error_reporting で設定したすべてのレベルのエラーを エラーストリームの一部としてウェブサーバーに返します。 セキュリティ上の理由で、実運用環境ではこれを "Off" にしておくことを推奨します。 エラーメッセージにはセキュリティ的に問題となる情報が含まれていることが多く、 それが外部に漏れることを防げます。

- open_basedir = <ディレクトリへのパス、セミコロン区切り>、 たとえば openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp" - このディレクティブは、PHP からのファイルシステムの操作を許可するディレクトリのパスを指定します。 指定したパス以外でのファイル操作はすべてエラーとなります。 このディレクティブは、共用ホスティング環境に PHP を導入するときに特に有用です。 ウェブサイトのルートディレクトリ以外のファイルを操作させないようにすることができます。

- upload_max_filesize = ###M および post_max_size = ###M - ファイルのアップロードおよび POST するデータの最大サイズを指定します。 PHP のアプリケーションで写真や動画などの大きなファイルをアップロードさせたい場合は、 これらの値を増やさなければなりません。

以上で、Windows への PHP のインストールが完了しました。ついで、 使用する WEB サーバー にあわせて、PHP を利用可能とするための設定を行います。 目次から使用する WEB サーバーを選択し、該当するセクションを参照してください。

PHP をウェブサーバー経由で実行するだけでなく、 .BAT スクリプトなどでコマンドラインから実行することもできます。

### Microsoft IIS

この節では、Microsoft Internet Information Services (IIS) への PHP のインストール手順について扱います。

- Microsoft IIS 5.1 および IIS 6.0 への PHP の手動インストール
- Microsoft IIS 7.0 以降への PHP の手動インストール

### Microsoft IIS 5.1 および IIS 6.0

この節では、Internet Information Services (IIS) 5.1 および IIS 6.0 を手動で設定して、PHP を Microsoft Windows XP および Windows Server 2003 で動かす方法を説明します。 IIS 7.0 以降のバージョンを Windows Vista, Windows Server 2008, Windows 7 そして Windows Server 2008 R2 で動かす方法については Microsoft IIS 7.0 以降 を参照ください。

#### IIS で PHP リクエストを処理するための設定

手動インストールの手順 での説明にしたがって、PHP をダウンロードしてインストールします。

> 注意:

> IIS を使う場合は、非スレッドセーフ版の PHP を推奨します。非スレッドセーフ版は » PHP for Windows: Binaries and Sources Releases. で取得できます。

CGI や FastCGI 固有の設定を、php.ini で以下のように行います。

例2 php.ini での CGI および FastCGI 用の設定

    fastcgi.impersonate = 1
    fastcgi.logging = 0
    cgi.fix_pathinfo=1
    cgi.force_redirect = 0

» Microsoft FastCGI Extension for IIS 5.1 and 6.0 をダウンロードしてインストールします。32 ビット版と 64 ビット版があるので、 環境にあわせて適切なパッケージを選びましょう。

FastCGI エクステンションを設定し、PHP のリクエストを処理できるようにするには 以下のコマンドを実行します。"-path" パラメータの値は、 php-cgi.exe の絶対パスに置き換えましょう。

例3 FastCGI エクステンションで PHP リクエストを処理するための設定

    cscript %windir%\system32\inetsrv\fcgiconfig.js -add -section:"PHP" ^
    -extension:php -path:"C:\PHP\php-cgi.exe"

このコマンドは、拡張子 *.php 用の IIS スクリプトマッピングを作成します。 .php で終わるすべての URL を FastCGI エクステンションで処理するようになります。 また、FastCGI エクステンションでの PHP リクエストの処理に php-cgi.exe を使うよう設定しています。

> 注意:

> この時点で、最低限必要なインストールと設定は完了しました。 これ以降の手順は必須ではありませんが、IIS 上で PHP を効果的に動かすために強く推奨するものです。

#### 匿名化およびファイルシステムへのアクセス

PHP を IIS で使う場合は、FastCGI の匿名化を有効にしておくことを推奨します。 これは、php.ini ファイルの fastcgi.impersonate ディレクティブで設定します。 匿名化を有効にすると、PHP はすべてのファイルシステム操作を IIS 認証で定義したユーザーアカウントで行います。 こうしておけば、同じ PHP プロセスを異なる IIS ウェブサイトで共有している場合でも (各サイトで IIS 認証のユーザーアカウントを分けておけば) 一方の PHP スクリプトからもう一方のファイルはアクセスできなくなります。

IIS 5.1 や IIS 6.0 のデフォルト設定では組み込みのユーザーアカウント IUSR_<MACHINE_NAME> による匿名認証が有効になっています。 つまり、IIS で PHP スクリプトを実行する場合は IUSR_<MACHINE_NAME> アカウントにスクリプトの読み込み権限を付与しなければならないということです。 PHP のアプリケーションからファイルへの書き込みやフォルダ内でのファイルの作成などをする場合は、 IUSR_<MACHINE_NAME> アカウントに書き込み権限が必要となります。

IIS 匿名認証で使うユーザーアカウントを設定するには、次のようにします。

1. Windows のスタートメニューで "ファイル名を指定して実行" を選び、"inetmgr" と入力して "Ok" をクリックする

2. ツリービューの "Web Sites" ノードにあるウェブサイトの一覧を展開し、 使うウェブサイトの上で右クリックして "プロパティ" を選択する

3. "ディレクトリセキュリティ" タブを選択する

4. "Authentication Methods" ダイアログの "User name:" フィールドで設定

ファイルやフォルダのパーミッションを変更するには、エクスプローラあるいは icacls コマンドを使います。

例4 ファイルのアクセス権の設定

    icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

#### IIS のデフォルトドキュメントを index.php にする

ドキュメント名を指定しない HTTP リクエストを受け取ったときには、 IIS のデフォルトドキュメントが使われます。PHP アプリケーションでは、通常は index.php をデフォルトドキュメントとします。 index.php を IIS のデフォルトドキュメントに追加するには、 次のようにします。

1. Windows のスタートメニューで "ファイル名を指定して実行" を選び、"inetmgr" と入力して "Ok" をクリックする

2. ツリービューの "Web Sites" ノードを右クリックして "プロパティ" を選択する

3. "Documents" タブをクリックする

4. "Add..." ボタンをクリックし、"Default content page:" に "index.php" を入力する

#### FastCGI および PHP の再利用設定

IIS FastCGI エクステンションで PHP プロセスの再利用を設定するには以下のコマンドを使います。 FastCGI の設定項目 instanceMaxRequests は、 ひとつの php-cgi.exe が何回リクエストを処理すると FastCGI エクステンションがシャットダウンさせるかを表します。 PHP の環境変数 PHP_FCGI_MAX_REQUESTS は、 ひとつの php-cgi.exe プロセスが何回リクエストを処理すると 自分をリサイクルするかを表します。 FastCGI の InstanceMaxRequests で設定した値が PHP_FCGI_MAX_REQUESTS 以下になるようにしましょう。

例5 FastCGI と PHP の再利用設定

    cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
    -InstanceMaxRequests:10000

    cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
    -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

#### FastCGI のタイムアウト設定

実行時間が長くなる PHP スクリプトがある場合は、FastCGI エクステンションのタイムアウト設定を増やします。タイムアウトに関連する設定項目は ActivityTimeout と RequestTimeout です。 これらの設定に関する詳細は » Configuring FastCGI Extension for IIS 6.0 を参照ください。

例6 FastCGI のタイムアウト設定

    cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
    -ActivityTimeout:90

    cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
    -RequestTimeout:90

#### php.ini ファイルの場所の変更

PHP が php.ini ファイルを探す場所は いくつかあり、 php.ini ファイルのデフォルトの場所を 環境変数 PHPRC で変更することができます。 特定の場所においた設定ファイルを PHP に読み込ませたい場合は、 以下のコマンドを実行します。環境変数 PHPRC には、php.ini ファイルがあるディレクトリへの絶対パスを指定しなければなりません。

例7 php.ini ファイルの場所の変更

    cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
    -EnvironmentVars:PHPRC:"C:\Some\Directory\"

### Microsoft IIS 7.0 以降

このセクションでは、Internet Information Services (IIS) 7.0 以降を設定して、PHP を Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 および Windows Server 2008 R2 で動かす方法を説明します。 IIS 5.1 や IIS 6.0 を Windows XP および Windows Server 2003 で動かす方法については Microsoft IIS 5.1 および IIS 6.0 を参照ください。

#### IIS での FastCGI サポートの有効化

FastCGI モジュールは、IIS のデフォルトでは無効になっています。 有効化する手順は、Windows のバージョンによって異なります。

Windows Vista SP1 および Windows 7 で FastCGI サポートを有効化する方法

1. Windows のスタートメニューで "ファイル名を指定して実行" を選び、 "optionalfeatures.exe" と入力して "Ok" をクリックする

2. "Windows Features" ダイアログで "Internet Information Services"、"World Wide Web Services"、"Application Development Features" を展開し、"CGI" チェックボックスを有効にする

3. OK をクリックし、インストールが完了するまで待つ

Windows Server 2008 および Windows Server 2008 R2 で FastCGI サポートを有効化する方法

1. Windows のスタートメニューで "ファイル名を指定して実行" を選び、 "CompMgmtLauncher" と入力して "Ok" をクリックする

2. "Web Server (IIS)" ロールが "Roles" ノードの下に存在しない場合は "Add Roles" をクリックして追加する

3. "Web Server (IIS)" ロールが存在する場合は、"Add Role Services" をクリックして "Application Development" グループの "CGI" チェックボックスを有効にする

4. "Next"、そして "Install" をクリックし、 インストールが完了するまで待つ

#### IIS で PHP リクエストを処理するための設定

手動インストールの手順 での説明にしたがって、PHP をダウンロードしてインストールします。

> 注意:

> IIS を使う場合は、非スレッドセーフ版の PHP を推奨します。非スレッドセーフ版は » PHP for Windows: Binaries and Sources Releases. で取得できます。

CGI や FastCGI 固有の設定を、php.ini で以下のように行います。

例8 php.ini での CGI および FastCGI 用の設定

    fastcgi.impersonate = 1
    fastcgi.logging = 0
    cgi.fix_pathinfo=1
    cgi.force_redirect = 0

PHP 用の IIS ハンドラマッピングを設定するには IIS マネージャのユーザーインターフェイス あるいはコマンドラインツールを使います。

##### IIS マネージャのユーザーインターフェイスを使った PHP 用ハンドラマッピングの作成

PHP 用の IIS ハンドラマッピングを IIS マネージャのユーザーインターフェイスで設定する手順は次のとおりです。

1. Windows のスタートメニューで "ファイル名を指定して実行" を選び、"inetmgr" と入力して "Ok" をクリックする

2. IIS マネージャのユーザーインターフェイスで、"Connections" ツリービューのサーバーノードを選ぶ

3. "Features View" ページで "Handler Mappings" を開く

4. "Actions" ペインで "Add Module Mapping..." をクリックする

5. "Add Module Mapping" ダイアログで次のように入力する

   - Request path: *.php
   - Module: FastCgiModule
   - Executable: C:\[PHP をインストールしたパス]\php-cgi.exe
   - Name: PHP_via_FastCGI

6. "Request Restrictions" ボタンをクリックし、 リクエストがファイルあるいはフォルダにマップされたときだけハンドラが起動するように設定する

7. すべてのダイアログで OK をクリックし、設定を保存する

##### コマンドラインツールによる PHP 用ハンドラマッピングの作成

次のコマンドを使うと、IIS FastCGI プロセスプールを作ることができます。 PHP リクエストの処理には php-cgi.exe を使います。 fullPath パラメータの値は php-cgi.exe への絶対パスで置き換えてください。

例9 IIS FastCGI プロセスプールの作成

    %windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
    /+[fullPath='c:\PHP\php-cgi.exe']

IIS に PHP のリクエストを処理させるには、以下のコマンドを実行します。 scriptProcessor パラメータの値は php-cgi.exe への絶対パスで置き換えてください。

例10 PHP リクエスト用のハンドラマッピングの作成

    %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
    /+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
    scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']

このコマンドは、拡張子 *.php 用の IIS ハンドラマッピングを作成します。 .php で終わるすべての URL を FastCGI モジュールで処理するようになります。

> 注意:

> この時点で、最低限必要なインストールと設定は完了しました。 これ以降の手順は必須ではありませんが、IIS 上で PHP を効果的に動かすために強く推奨するものです。

#### 匿名化およびファイルシステムへのアクセス

PHP を IIS で使う場合は、FastCGI の匿名化を有効にしておくことを推奨します。 これは、php.ini ファイルの fastcgi.impersonate ディレクティブで設定します。 匿名化を有効にすると、PHP はすべてのファイルシステム操作を IIS 認証で定義したユーザーアカウントで行います。 こうしておけば、同じ PHP プロセスを異なる IIS ウェブサイトで共有している場合でも (各サイトで IIS 認証のユーザーアカウントを分けておけば) 一方の PHP スクリプトからもう一方のファイルはアクセスできなくなります。

IIS 7 のデフォルト設定では組み込みのユーザーアカウント IUSR による匿名認証が有効になっています。 つまり、IIS で PHP スクリプトを実行する場合は IUSR アカウントにスクリプトの読み込み権限を付与しなければならないということです。 PHP のアプリケーションからファイルへの書き込みやフォルダ内でのファイルの作成などをする場合は、 IUSR アカウントに書き込み権限が必要となります。

IIS 7 の匿名認証で使うユーザーアカウントを設定するには、次のコマンドを実行します。 "Default Web Site" の部分は、使用する IIS ウェブサイト名に置き換えてください。 出力される XML 設定要素の中から userName 属性を探します。

例11 IIS 匿名認証で使うアカウントの設定

    %windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
    /section:anonymousAuthentication

    <system.webServer>
      <security>
        <authentication>
          <anonymousAuthentication enabled="true" userName="IUSR" />
        </authentication>
       </security>
    </system.webServer>

> 注意:

> userName 属性が anonymousAuthentication 要素になかったり、あるいは属性の値が空の文字列になっている場合は、 アプリケーションプールの認証情報をそのウェブサイトの匿名認証で使います。

ファイルやフォルダのパーミッションを変更するには、エクスプローラあるいは icacls コマンドを使います。

例12 ファイルのアクセス権の設定

    icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

#### IIS のデフォルトドキュメントを index.php にする

ドキュメント名を指定しない HTTP リクエストを受け取ったときには、 IIS のデフォルトドキュメントが使われます。PHP アプリケーションでは、通常は index.php をデフォルトドキュメントとします。 index.php を IIS のデフォルトドキュメントに追加するには、 次のようにします。

例13 index.php を IIS のデフォルトドキュメントにする

    %windir%\system32\inetsrv\appcmd.exe set config ^
    -section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
    /commit:apphost

#### FastCGI および PHP の再利用設定

IIS FastCGI で PHP プロセスの再利用を設定するには以下のコマンドを使います。 FastCGI の設定項目 instanceMaxRequests は、 ひとつの php-cgi.exe が何回リクエストを処理すると FastCGI エクステンションがシャットダウンさせるかを表します。 PHP の環境変数 PHP_FCGI_MAX_REQUESTS は、 ひとつの php-cgi.exe プロセスが何回リクエストを処理すると 自分をリサイクルするかを表します。 FastCGI の InstanceMaxRequests で設定した値が PHP_FCGI_MAX_REQUESTS 以下になるようにしましょう。

例14 FastCGI と PHP の再利用設定

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
    [name='PHP_FCGI_MAX_REQUESTS',value='10000']"

#### FastCGI のタイムアウト設定

実行時間が長くなる PHP スクリプトがある場合は、FastCGI のタイムアウト設定を増やします。タイムアウトに関連する設定項目は activityTimeout と requestTimeout です。 タイムアウト設定を変更するには以下のコマンドを使います。 fullPath パラメータの値を php-cgi.exe ファイルへの絶対パスに置き換えてください。

例15 FastCGI のタイムアウト設定

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
    /[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost

#### php.ini ファイルの場所の変更

PHP が php.ini ファイルを探す場所は いくつかあり、 php.ini ファイルのデフォルトの場所を 環境変数 PHPRC で変更することができます。 特定の場所においた設定ファイルを PHP に読み込ませたい場合は、 以下のコマンドを実行します。環境変数 PHPRC には、php.ini ファイルがあるディレクトリへの絶対パスを指定しなければなりません。

例16 php.ini ファイルの場所の変更

    appcmd.exe set config  -section:system.webServer/fastCgi ^
    /+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
    [name='PHPRC',value='C:\Some\Directory\']" /commit:apphost

### Apache 1.3.x （Microsoft Windows 用）

このセクションでは、Microsoft Windows 上の Apache 1.3.x で PHP を使用する場合について説明します。

> 注意:

> まず始めに、マニュアルインストールの手順 をお読みください。

PHP を Windows 上の Apache 1.3.x で動作させるには、2種類の方法が あります。一つは、CGI バイナリ (PHP 4 の場合 php.exe、 PHP 5 の場合 php-cgi.exe) を使用する方法、もう一つ は Apache モジュール DLL を使用する方法です。どちらの場合も httpd.conf を編集して Apache が PHP を利用できるようにした後、 Apache サーバーを再起動する必要があります。

Windwos 環境向けの SAPI モジュールはかなり安定してきているため、 透過性と安全性の面からも CGI バイナリより SAPI モジュールの 使用を推奨します。

Apache で PHP を使うように設定する手順にはいくつかのバリエーションがありますが、 いずれも入門者にもできるほど簡単です。設定ディレクティブに関する詳細については、 Apache のドキュメントも参照してください。

設定ファイルを変更した後、サーバーの再起動を忘れずに行ってください。 Apache を Windows サービスとして実行しているなら、NET STOP APACHE とした後 NET START APACHE とします。 もしくは、スタートメニューのショートカットからも再起動できる場合もあります。

> 注意: Windows 上で Apache 設定ファイルにパスの値を追加する際、例えば c:\directory\file.ext に含まれるすべてのバックスラッシュは c:/directory/file.ext のように前向きスラッシュに変換する必要があります。 また、ディレクトリを表す際には最後にスラッシュをつけなければなりません。

#### Apache モジュールの使用

以下の行を Apache の httpd.conf ファイルに追加してください。

例17 Apache 1.3.x でモジュール版の PHP を使用する場合の設定

以下では、PHP は c:\php にインストールされていると仮定します。 そうでない場合はパスを適当に修正してください。

PHP 4 の場合

    # LoadModule セクションの最後に追加
    # sapi ディレクトリからこのファイルをコピーするのを忘れないこと!
    LoadModule php4_module "C:/php/php4apache.dll"

    # AddModule セクションの最後に追加
    AddModule mod_php4.c

PHP 5 の場合

    # LoadModule セクションの最後に追加
    LoadModule php5_module "C:/php/php5apache.dll"

    # AddModule セクションの最後に追加
    AddModule mod_php5.c

共通

    # <IfModule mod_mime.c> 条件節の内部に追加
    AddType application/x-httpd-php .php

    # .phps ファイルを構文ハイライト表示する場合に追加
    AddType application/x-httpd-php-source .phps

#### CGI バイナリの使用

マニュアルインストールの手順 のセクションにある通り、PHP パッケージを C:\php\ に展開したならば、以下を Apache の設定ファイルに追加すれば CGI バイナリを利用可能にできます。

例18 Apache 1.3.x で CGI 版の PHP を使用する場合の設定

    ScriptAlias /php/ "c:/php/"
    AddType application/x-httpd-php .php

    # PHP 4 の場合
    Action application/x-httpd-php "/php/php.exe"

    # PHP 5 の場合
    Action application/x-httpd-php "/php/php-cgi.exe"

    # php.ini の場所を設定
    SetEnv PHPRC C:/php

上記の 2 行目は、コメントアウトされた状態で httpd.conf に記載されている場合があります。また、c:/php/ は、実際のパスにあわせて修正してください。
警告

CGI モードで公開したサーバーは、いくつかの脆弱性の標的となる可能性があります。 これらの攻撃からサーバーを守る方法については、 CGI セキュリティ のセクションを参照してください。

PHP ソースの構文ハイライト表示については、モジュール版にあるような便利な オプションはありません。Apache で CGI 版の PHP を使用している場合、 highlight_file() 関数を使用してください。 普通に PHP スクリプトを作成し、次のようにコードを記述すれば、構文ハイライト表示が可能です。 <?php highlight_file('ハイライト表示するファイル'); ?>

### Apache 2.x （Microsoft Windows 用）

このセクションでは、Microsoft Windows 上の Apache 2.x で PHP を使用する場合について説明します。

> 注意:

> まず始めに、マニュアルインストールの手順 をお読みください。

> 注意: Apache 2.2 のサポート

> Apache 2.2 を利用している方は、Apache 2.2 用の DLL ファイルの名前が php5apache2.dll ではなく php5apache2_2.dll であることに注意しましょう。 このファイルは PHP 5.2.0 以降にしか含まれません。

» Apache ドキュメンテーション を参照し、Apache 2.x サーバーの基本を理解しておくことを強く推奨します。 また、以下の解説を読む前に、Apache 2.x に関する » Windows 固有の情報 についても参照するとよいでしょう。

Apache 2.x は、サーバープラットフォーム用の Windows、 つまり Windows NT 4.0, Windows 2000, Windows XP および Windows 7 で動作するように設計されています。Apache 2.x は Windows 9x でもそれなりに動作しますが、サポートは不完全です。 また、一部うまく動作しない機能もあります。 この問題の解決策はありません。

最新の » Apache 2.x と、 対応するバージョンの PHP をダウンロードしてください。 マニュアルインストールの手順 を実施したら、引き続き以下のとおり PHP と Apache の設定を行ってください。

PHP を Windows 上の Apache 2.x で動かすには三通りの方法があります。 PHP をハンドラとして動かす方法、CGI として動かす方法、そして FastCGI で動かす方法です。

> 注意: Windows 上で Apache 設定ファイルにパスの値を追加する際、例えば c:\directory\file.ext に含まれるすべてのバックスラッシュは c:/directory/file.ext のように前向きスラッシュに変換する必要があります。 また、ディレクトリを表す際には最後にスラッシュをつけなければなりません。

#### Apache ハンドラとしてのインストール

以下の行を Apache 設定ファイル httpd.conf に追加して Apache 2.x 用の PHP モジュールを読み込まなければなりません。

例19 PHP を Apache 2.x ハンドラとして使う設定

    #
    LoadModule php5_module "c:/php/php5apache2.dll"
    AddHandler application/x-httpd-php .php

    # php.ini へのパスを設定します
    PHPIniDir "C:/php"

> 注意: 上の例の C:/php/ は実際のパスにあわせて修正してください。 LoadModule ディレクティブで php5apache2.dll と php5apache2_2.dll のどちらを使うのかに注意し、 指定したファイルが実際にその場所にあるかどうかを忘れずに確認しましょう。

上の設定は、拡張子 .php を含むすべてのファイルを PHP で処理するようにします。 たとえそれ以外の拡張子が含まれていたとしてもです。たとえば example.php.txt という名前のファイルも PHP ハンドラが処理します。ファイル名の 最後が .php であるものだけを処理させたい場合は、次のように設定します。

    <FilesMatch \.php$>
          SetHandler application/x-httpd-php
     </FilesMatch>

#### CGI としての PHP の実行

» Apache CGI ドキュメント を読み、Apache 上の CGI について理解しておきましょう。

PHP を CGI として実行するには、ScriptAlias ディレクティブで CGI ディレクトリとして指定した場所に php-cgi ファイルを置かなければなりません。

さらに、PHP ファイルに #! の行を追加して PHP バイナリの場所を指定しなければなりません。

例20 PHP を Apache 2.x 上で CGI として動かす例

    #!C:/php/php.exe
    <?php
      phpinfo();
    ?>

警告

CGI モードで公開したサーバーは、いくつかの脆弱性の標的となる可能性があります。 これらの攻撃からサーバーを守る方法については、 CGI セキュリティ のセクションを参照してください。

#### PHP を FastCGI で実行する

PHP を FastCGI で動かすのには、CGI として動かすのにくらべると多くの利点があります。 設定方法は単純明快です。

まず mod_fcgid を » http://httpd.apache.org/mod_fcgid/ から取得します。Win32 用のバイナリがこのサイトからダウンロードできます。 そして、説明に従ってモジュールをインストールしましょう。

次にウェブサーバーを以下のように設定します。 パスの部分は適切に変更し、インストールするシステム上の環境にあわせましょう。

例21 PHP を FastCGI として動かす Apache の設定

    LoadModule fcgid_module modules/mod_fcgid.so

    # Where is your php.ini file?
    FcgidInitialEnv PHPRC        "c:/php"

    AddHandler fcgid-script .php
    FcgidWrapper "c:/php/php-cgi.exe" .php

これで、拡張子 .php のファイルは PHP FastCGI ラッパーが処理するようになります。

### Sun, iPlanet, Netscape サーバー（Microsoft Windows 用）

このセクションでは、Windows 上の Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server で PHP を使用する場合について説明します。

PHP 4.3.3 より、NSAPI モジュール を使うことが可能です。

#### Sun, iPlanet, Netscape サーバー で CGI 版の PHP を使用する

CGI 版の PHP を使用する場合は、以下のようにしてください。

- php4ts.dll をシステムルート （Windows がインストールされているフォルダ）にコピーします。

- コマンドラインからファイルの関連付けを行います。 次の 2 行をタイプしてください。

      assoc .php=PHPScript
      ftype PHPScript=c:\php\php.exe %1 %*

- Netscape Enterprise Administration Server で、ダミーの shellcgi ディレクトリを作成し、その後すぐに削除します （このステップにより 5 つの重要な行が obj.conf に作成され、 Web サーバーが shellcgi スクリプトを扱えるようになります。）
- Netscape Enterprise Administration Server で 新しい mime type を作成します。(Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php)
- PHP を実行するすべての Web サーバーインスタンスで上記を実行してください。

CGI 版の PHP を使用する場合の詳細な説明は » http://benoit.noss.free.fr/php/install-php.html を参照してください。

#### Sun, iPlanet, Netscape サーバー で NSAPI 版の PHP を使用する

NSAPI 版の PHP を使用する場合は、以下のようにしてください。

- php4ts.dll をシステムルート （Windows がインストールされているディレクトリ）にコピーする。

- コマンドラインからファイルの関連付けを行います。 次の 2 行をタイプしてください。

      assoc .php=PHPScript
      ftype PHPScript=c:\php\php.exe %1 %*

- Netscape Enterprise Administration Server において 新しい mime type を作成します。 (Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php)

- 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"]

  (PHP >= 4.3.3) php_ini パラメータはオプションですが、 これを指定することにより、Web サーバーの設定ファイルがあるフォルダに 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 ...]

  (PHP >= 4.3.3) 追加のパラメータとして、いくつかの特別な php.ini 値を 追加することができます。例えば、コンテキスト php4_execute をコールする時に docroot="/path/to/docroot" を設定することができます。 論理値の場合、 "On","Off",...（これは正 しく動作しません）ではなく、0/1 を値として使用してください。 例えば、 zlib.output_compression="On" ではなく、 zlib.output_compression=1 とします。

- 以下は、（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 が使用されている事を隠したい場合に有用です。
- Web サービスを再起動して設定を反映させます。
- PHP を実行するすべての Web サーバーインスタンスで上記を行ってください。

> 注意:

> NSAPI 版の PHP の使用についてのより詳細な説明は » http://benoit.noss.free.fr/php/install-php4.html をご覧ください。

> 注意:

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

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

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 >= 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.conf の type="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 ライブラリの機能を使用して いることにあります。

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"

ここで、XX は接続する DLL のバージョン番号です。 番号を調べるには、サーバーのルートで、対応する名前のファイルを探してください。 おそらく、最もファイルサイズの大きい DLL が探しているファイルでしょう。

ステータスは phpinfo() 関数を使って確認できます。

> 注意:

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

### Sambar サーバー（Microsoft Windows 用）

このセクションでは、Windows 上の » Sambar Server で PHP を使用する場合について説明します。

> 注意:

> まず始めに、マニュアルインストールの手順 をお読みください。

以下の手順は、Windows上 の Sambar サーバーで ISAPI モジュール版の PHP を使うように 設定する方法を解説するものです。

- Sambar をインストールしたフォルダ (の config フォルダ)にある mappings.ini という名前のファイルを探します。

- mappings.ini を開き、以下の行を [ISAPI] の下に追加します。

  例22 Sambar での ISAPI の設定

      # PHP 4 用
      *.php = c:\php\php4isapi.dll

      # PHP 5 用
      *.php = c:\php\php5isapi.dll

  (PHP が c:\php にインストールされていると 仮定しています。)

- 変更を有効にするために Sambar サーバーを再起動します。

> 注意:

> PHP で ネットワーク上の他のコンピュータにあるリソースと通信したい場合は、 Sambar Server サービスが使用するアカウントを変更する必要があります。 Sambar Server サービスが使用しているデフォルトのアカウントは LocalSystem で、これはリモートのリソースにアクセスできません。 アカウントを変更するには、コントロールパネルの管理ツールから 「サービス」を使用します。

### Xitami（Microsoft Windows 用）

このセクションでは、Windows 上の » Xitami で PHP を使用する場合について説明します。

> 注意:

> まず始めに、マニュアルインストールの手順 をお読みください。

以下の手順は、Windows 上の Xitami でPHP の CGI 版バイナリを動作させる際の 設定方法です。

> 注意: CGI 版 PHP を使用する場合

> cgi.force_redirectに関するFAQ に重要な情報がありますのでお読みください。このディレクティブが 0 にセットされている必要があります。 $_SERVER['PHP_SELF'] を使用する場合は、 cgi.fix_pathinfo をオンにする必要があります。

警告

CGI モードで公開したサーバーは、いくつかの脆弱性の標的となる可能性があります。 これらの攻撃からサーバーを守る方法については、 CGI セキュリティ のセクションを参照してください。

- Web サーバーが正常に動作していることを確認し、 ブラウザで Xitami 管理用コンソール（通常は http://127.0.0.1/admin）を参照して、「Configuration」を クリックします。

- 「Filters」を選択し、php にパースさせるファイルの拡張子 (.php など) を 「File extensions (.xxx) 」フィールドに入力します。

- 「Filter command or script」に、CGI 版 PHP バイナリのパスと名前 (たとえば、c:\php\php.exe) を入力します。

- 「Save」アイコンを押します。

- 変更点を反映するためにサーバーを再起動します。

### ソースからのビルド

この章では、Windows 上でマイクロソフトのツールを用いて PHP をソースから コンパイルする方法を説明します。PHP を cygwin でコンパイルする場合は Unix システムへのインストール を参照ください。

Wiki のドキュメント » http://wiki.php.net/internals/windows/stepbystepbuild を参照ください。

### Windows 用 PHP 拡張モジュール

Windows に PHP を インストールし、Web サーバーの設定ができたら、 次は PHP 拡張モジュールを使うための設定です。 php.ini を使って PHP が起動時にロードする拡張モジュールを設定することができます。 もしくは、スクリプトの中で dl() 関数を使用することにより、 拡張モジュールを動的にロードすることも可能です。

PHP 拡張モジュールの DLL には、ファイル名の前に 'php_' が付いています。

Windows 版の PHP には、多くの拡張モジュールが 組み込まれています。これらの関数を使用する際には、 追加の DLL ファイルや extension ディレクティブの設定は不要です。 追加の DLL が必要となる (あるいはかつて必要だった) 拡張モジュールについては、 Windows 版 PHP 拡張モジュール の表にまとめてあります。以下にあげられている拡張モジュールは、すでに PHP に組み込まれています (PHP 5.0.4 時点): BCMath, Caledar, COM, Ctype, DOM, FTP, LibXML, Iconv, ODBC, PCRE, Session, SimpleXML, SPL, SQLite, WDDX, XML そして Zlib.

PHP が拡張モジュールを探すデフォルトの場所は C:\php5 です。 変更するには php.ini ファイルを編集してください。

- extension_dir を拡張モジュール があるフォルダに変更する必要があります。 php_*.dllファイルをそこに置いてください。 例えば次のようになります。

      extension_dir = c:\php\extensions

- php.ini には、多くの拡張モジュール名がコメントアウトされた状態で記載済みです。 それらの拡張モジュールを有効にするには、php.ini 上の extension=php_*.dll の行をアンコメント（行頭の ; を削除する）してください。

  例23 Windows 版の PHP で Bzip2 拡張モジュールを有効にする

      // この行を以下から
      ;extension=php_bz2.dll

      // このように変更する
      extension=php_bz2.dll

- 拡張モジュールによっては、その動作に外部 DLL が必要な場合があります。 配布パッケージには、一部の外部 DLL がバンドルされています。 親フォルダを参照ください。ただし、必要な外部 DLL がバンドルされていないモジュールもあり、たとえば、Oracle モジュール (php_oci8.dll) は、非バンドルの DLL を必要とします。 また、忘れずに C:\php をシステムパスに 追加してください（その方法は、別途 FAQ に記載されています。）

- これらの DLLs の中には、PHP の配布ファイルに含まれていないものもあります。 詳細は、それぞれの拡張モジュールのドキュメントを参照ください。 また、PECL についての詳細は、マニュアルの PECL 拡張モジュールのインストール という節を参照ください。多くの PHP 拡張モジュールが PECL に移行しつつあり、これらは 個別にダウンロード しなければなりません。

> 注意: PHP をサーバーモジュールとして実行している場合は、Webサーバーを再起動しないと、 php.ini の設定が反映されません。Web サーバーの再起動を忘れずに行ってください。

以下の表は、使用可能な拡張モジュールと それらの実行に別途必要な DLL のリストです。

PHP 拡張モジュール
拡張モジュール | 説明 | 備考
--- | --- | ---
php_bz2.dll | bzip2 圧縮関数 |
php_calendar.dll | カレンダー 関数 |
php_crack.dll | Crack 関数 |
php_ctype.dll | 文字型(ctype) 関数 |
php_curl.dll | CURL, Client URL Library 関数 | libeay32.dll および ssleay32.dll が必要 （バンドル）
php_dba.dll | DBA: (dbm 型の) データベース・アブストラクション レイヤー関数 |
php_dbase.dll | dBase 関数 |
php_dbx.dll | dbx 関数 |
php_exif.dll | EXIF 関数 | php_mbstring.dll。php.ini で php_exif.dll は php_mbstring.dll の後で読み込まれる必要がある。
php_fbsql.dll | FrontBase 関数 |
php_fdf.dll | FDF: Forms Data Format 関数 | fdftk.dll が必要 （バンドル）
php_filepro.dll | filePro 関数 | 読み込みのみ
php_ftp.dll | FTP 関数 |
php_gd2.dll | イメージ 関数 (GD2 ライブラリ) | GD2
php_gettext.dll | Gettext 関数 | PHP <= 4.2.0 では gnu_gettext.dll が必要 （バンドル）, PHP >= 4.2.3 では libintl-1.dll および iconv.dll が必要（バンドル）
php_hyperwave.dll | HyperWave 関数 |
php_iconv.dll | ICONV 関数 | iconv-1.3.dll が必要（バンドル）、 iconv.dll
php_ifx.dll | Informix 関数 | Informix ライブラリが必要
php_iisfunc.dll | IIS management 関数 |
php_imap.dll | IMAP,POP3,NNTP 関数 |
php_ingres.dll | Ingres 関数 | Ingres ライブラリが必要
php_interbase.dll | InterBase 関数 | gds32.dll が必要（バンドル）
php_ldap.dll | LDAP 関数 | libeay32.dll と ssleay32.dll が必要（バンドル）
php_mbstring.dll | マルチバイト文字列 関数 |
php_mcrypt.dll | Mcrypt 暗号化 関数 | libmcrypt.dll が必要
php_mhash.dll | Mhash 関数 | libmhash.dll が必要（バンドル）
php_mime_magic.dll | Mimetype 関数 | magic.mime が必要（バンドル）
php_ming.dll | Ming 関数 (Flash 用) |
php_msql.dll | mSQL 関数 | msql.dll が必要（バンドル）
php_mssql.dll | MSSQL 関数 | ntwdblib.dll が必要（バンドル）
php_mysql.dll | MySQL 関数 | libmysql.dll が必要（バンドル）
php_mysqli.dll | MySQLi 関数 | libmysql.dll (PHP <= 5.0.2 では libmysqli.dll) が必要（バンドル）
php_oci8.dll | Oracle 8 関数 | Oracle 8.1+ クライアントライブラリが必要
php_openssl.dll | OpenSSL 関数 | libeay32.dll が必要（バンドル）
php_pdf.dll | PDF 関数 |
php_pgsql.dll | PostgreSQL 関数 |
php_shmop.dll | 共有メモリ 関数 (shmop) |
php_snmp.dll | SNMP 関数 | NT のみ
php_soap.dll | SOAP 関数 |
php_sockets.dll | ソケット 関数 |
php_sybase_ct.dll | Sybase 関数 | Sybase クライアントライブラリが必要
php_tidy.dll | Tidy 関数 |
php_tokenizer.dll | Tokenizer 関数 |
php_w32api.dll | W32api 関数 |
php_xmlrpc.dll | XML-RPC 関数 | iconv.dll が必要（バンドル）
php_xslt.dll | XSLT 関数 | sablot.dll, expat.dll および iconv.dll が必要（バンドル）
php_yaz.dll | YAZ 関数 | yaz.dll が必要（バンドル）
php_zip.dll | Zip ファイル 関数 | 読込のみ
php_zlib.dll | ZLib 圧縮関数 |

### Microsoft Windows のコマンドラインでの PHP

この節では、PHP を Windows のコマンドラインで実行するときの注意点やヒントを説明します。

> 注意:

> まず最初に 手動でのインストールの手順 を読みましょう!

特に Windows に手を加えなくても、PHP をコマンドラインから実行することはできます。

    C:\PHP5\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

しかし、次の手順に従えば、さらにシンプルに実行することができます。 この中にはすでに実行済みのものがあるかもしれませんが、順を追って進めていくために もう一度ここで説明しておきます。

> 注意:

> PATH と PATHEXT は Windows で重要な働きをするシステム変数です。 既存の変数の値を上書きしないように注意しましょう。あくまでも追記するだけにします。

- PHP の実行ファイル (php.exe、 php-win.exe あるいは php-cli.exe。 PHP のバージョンや設定によって変わります) がある場所を環境変数 PATH の最後に追加します。 PHP のディレクトリを PATH に追加する方法は、FAQ の項目 を参照ください。

- 拡張子 .PHP を、環境変数 PATHEXT の最後に追加します。これは、環境変数 PATH の変更と同時に行うこともできます。 FAQ に書かれている手順に従いましょう。ただし、環境変数 PATH の部分は PATHEXT に変更します。

  > 注意:

  > .PHP をどの位置に書くかによって、 ファイル名がマッチしたときに実行されるスクリプトあるいはプログラムが決まります。 たとえば .PHP を .BAT より前に書くと、 同じ名前のバッチファイルがあってもスクリプトのほうを優先して実行します。

- 拡張子 .PHP をファイル形式と関連づけます。 これは、次のコマンドで行います。

      assoc .php=phpfile

- ファイル形式 phpfile を適切な PHP 実行ファイルと関連づけます。 これは、次のコマンドで行います。

      ftype phpfile="C:\PHP5\php.exe" -f "%1" -- %~2

このようにしておくと、どのディレクトリにあるスクリプトを実行するときにも PHP 実行ファイルのパスや拡張子 .PHP をタイプしなくて済むようになります。 また、スクリプトに渡すパラメータを指定することもできます。

次の例は、レジストリの変更の一部を示したものです。これらは手動で行うこともできます。

例24 レジストリの変更

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
    @="phpfile"
    "Content Type"="application/php"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
    @="PHP Script"
    "EditFlags"=dword:00000000
    "BrowserFlags"=dword:00000008
    "AlwaysShowExt"=""

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
    @="C:\\PHP5\\php-win.exe,0"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
    @="Open"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
    @="&Open"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
    @="\"C:\\PHP5\\php.exe\" -f \"%1\" -- %~2"

これらの変更をすれば、同じコマンドを次のように書くことができます。

    "C:\PHP Scripts\script" -arg1 -arg2 -arg3

また、"C:\PHP Scripts" が環境変数 PATH に含まれていれば、次のように書くこともできます。

    script -arg1 -arg2 -arg3

> 注意:

> これらのテクニックを使って PHP スクリプトをコマンドラインフィルタとして使おうとすると、 ちょっとした問題が発生します。「コマンドラインフィルタとして使う」とは、たとえば

>     dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3

> あるいは

>     dir | script -arg1 -arg2 -arg3

> のように使うということです。 このようにすると、スクリプトがハングして何も出力されなくなります。 これをうまく動作させるには、さらにレジストリを変更しなければなりません。

>     Windows Registry Editor Version 5.00

>     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
>     "InheritConsoleHandles"=dword:00000001

> この件に関する詳細な情報は » Microsoft Knowledgebase Article : 321788 を参照ください。 Windows 10 ではこの設定が変更されたようです。Windows 10 をインストールしたデフォルトの状態で、 コンソールのハンドルが自動的に引き継がれるようになります。この件に関しては、 » Microsoft のフォーラムへの投稿 に説明があります。