古い 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-productionphp.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

この節では、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:" フィールドで設定

IIS 5.1 および IIS 6.0 の匿名認証

ファイルやフォルダのパーミッションを変更するには、エクスプローラあるいは 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" を入力する

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

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 エクステンションのタイムアウト設定を増やします。タイムアウトに関連する設定項目は ActivityTimeoutRequestTimeout です。 これらの設定に関する詳細は » 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 Vista SP1 および Windows 7 での FastCGI サポートの有効化

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" をクリックし、 インストールが完了するまで待つ

Windows Server 2008 および Windows Server 2008 R2 での FastCGI サポートの有効化

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" を開く

    PHP 用の IIS ハンドラマッピングの作成 : ハンドラマッピングの場所

  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 ハンドラマッピングの作成 : ハンドラマッピングの追加

コマンドラインツールによる 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 のタイムアウト設定を増やします。タイムアウトに関連する設定項目は activityTimeoutrequestTimeout です。 タイムアウト設定を変更するには以下のコマンドを使います。 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.dllphp5apache2_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 ラッパーが処理するようになります。

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 のドキュメント » https://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, Calendar, COM, Ctype, DOM, FTP, LibXML, Iconv, ODBC, PCRE, Session, SimpleXML, SPL, 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) は、PHP にバンドルされていない 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_ctype.dll 文字型(ctype) 関数  
php_curl.dll CURL, Client URL Library 関数 libeay32.dll および ssleay32.dll (バンドル), OpenSSL 1.1 の場合、 libcrypto-*.dll および libssl-*.dll が必要 (バンドル)
php_dba.dll DBA: (dbm 型の) データベース・アブストラクション レイヤー関数  
php_dbase.dll dBase 関数  
php_exif.dll EXIF 関数 php_mbstring.dllphp.iniphp_exif.dllphp_mbstring.dll の後で読み込まれる必要がある。
php_fbsql.dll FrontBase 関数  
php_fdf.dll FDF: Forms Data Format 関数 fdftk.dll が必要 (バンドル)
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_iisfunc.dll IIS management 関数  
php_imap.dll IMAP,POP3,NNTP 関数  
php_interbase.dll InterBase 関数 gds32.dll が必要(バンドル)
php_ldap.dll LDAP 関数 libeay32.dllssleay32.dll (バンドル)、 OpenSSL 1.1 以降の場合 libcrypto-*.dlllibssl-*.dll が必要 (バンドル)
php_mbstring.dll マルチバイト文字列 関数  
php_mcrypt.dll Mcrypt 暗号化 関数 libmcrypt.dll が必要
php_mhash.dll Mhash 関数 libmhash.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(バンドル)、 OpenSSL 1.1 以降の場合は、liblibcrypto-*.dll が必要 (バンドル)
php_pgsql.dll PostgreSQL 関数  
php_shmop.dll 共有メモリ 関数 (shmop)  
php_snmp.dll SNMP 関数 NT のみ
php_soap.dll SOAP 関数  
php_sockets.dll ソケット 関数  
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

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

    注意:

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

  • PHP の実行ファイル (php.exephp-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 のフォーラムへの投稿 に説明があります。

add a note add a note

User Contributed Notes 1 note

up
-3
some dot email at mail dot com
6 years ago
There is an unofficial version for php 5.6 (apache 2.4) installed on WinXP
Link - http://www.apachelounge.com/viewtopic.php?t=6334

I personally haven't tried it.
To Top