インストール

このセクションでは PHP のインストール方法に関する一般的な質問を扱います。 PHP は、ほとんど全ての OS とウェブサーバーで 利用可能です。

PHP をインストールするには、インストールと設定 の指示に従ってください。

  1. なぜ、Apache 2 のマルチスレッド MPM モードを実運用環境で使用するべきではないのですか?
  2. Unix/Windows: php.ini ファイルはどこに置けばよいのですか?
  3. Unix: PHP をインストールしましたが、ファイルをロードするたびに 'Document Contains No Data(ページが表示できません)' という メッセージが表示されます。何が起こっているのですか?
  4. Unix: RPM を使って PHP をインストールしたのですが、Apache が PHP のページを 処理してくれません。何が起こっているのですか?
  5. Unix: Apache に FrontPage エクステンションのパッチを当てたら、突然 PHP が動作しなくなってしまいました。PHP は Apache の FrontPage エクステンションと共存することはできないのですか?
  6. Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスしても何も表示されません。
  7. Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスすると Internal Server Error 500 となってしまいます。
  8. PHP をインストールするまではエラーもなく問題なく進んだのですが、 Apache を起動させようとすると undefined symbol エラーが発生します。 [mybox:user /src/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
  9. Windows: PHP をインストールしたのですがブラウザから PHP スクリプト にアクセスすると次のようなエラーが出力されます。 cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
  10. Windows: 全ての説明に従っているのに PHP が IIS で動作しません!
  11. IIS, PWS, OmniHTTPD, Xitami上でCGIとしてPHPを実行するとき、 次のようなエラーが出る:Security Alert! PHP CGI cannot be accessed directly.
  12. php.ini が認識され読み込まれていることをどうやって知ることが できますか? 自分の行った変更が反映されてないらしいのですが。
  13. Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?
  14. Windows 上の PHP で、php.ini を使えるようにするにはどうしたらいいのですか?
  15. Apache のコンテントネゴシエーション(MultiViews オプション)を PHP で使用することはできますか?
  16. PHP が処理できるリクエストメソッドは GET および POST だけなのですか?
なぜ、Apache 2 のマルチスレッド MPM モードを実運用環境で使用するべきではないのですか?

PHP はグルー(糊)です。このグルーは、多くのサードパーティ製のライブラリを くっつけることによりクールな Web アプリケーションを構築するために使用され、 直観的で簡単に習得できる言語インターフェイスにより、一つの整合性のある実体として 見せることができます。 PHP の柔軟性と力は、プラットフォームの安定性と堅牢性に基づいています。 グルーによる結合をするためには、OS や Web サーバー、サードパーティ製のライブラリが必要です。 これらの一つの機能が停止した場合、PHP は問題を特定し、速やかに修正する 手段が必要です。 実行スレッドを完全に分離しなかったり、 メモリセグメントを完全に分離しなかったり、 各リクエストで使用される強力なサンドボックスを有さないことで、 基本的なフレームワークをより複雑なものにした場合、 PHP のシステムに弱点が生まれます。

マルチスレッド MPM を使いたい場合は、 PHP が自分のメモリ空間で実行される FastCGI の設定をみてください。

Unix/Windows: php.ini ファイルはどこに置けばよいのですか?

UNIX の場合、デフォルトでは /usr/local/lib です。コンパイル時に --with-config-file-path オプションを使用してこの場所を変えたいという人も多いでしょう。 例えばこのようにすることも出来ます:

--with-config-file-path=/etc
そしてディストリビューションの php.ini-development/etc/php.ini にコピーし、環境に合うように 編集してください。

--with-config-file-scan-dir=PATH

Windows の場合、php.ini のデフォルトパスは Windows ディレクトリになります。 Apache ウェブサーバーを使っている場合はまず Apache がインストールされているディレクトリ (例えば c:\program files\apache group\apache にある php.ini を探そうとします。このため、異なる php.ini ファイルを異なるバージョンの Apache ごとに置いておくことができます。

設定ファイルの章も参照してください。

Unix: PHP をインストールしましたが、ファイルをロードするたびに 'Document Contains No Data(ページが表示できません)' という メッセージが表示されます。何が起こっているのですか?

これはおそらく PHP に何らかの問題が起こっていてコアダンプしている という状態です。サーバーのエラーログを見てこのケースかどうかチェック してください。そして小さなテストケースで問題を再現させてみてください。 もし 'gdb' の使い方が分かるならバグレポートに加えてバックトレースを 提供してもらえると開発者が問題の箇所を突き止めるのに 非常に役立ちます。もしあなたがPHPをApacheモジュールとして使用している 場合は以下のようにします:

  • httpd を停止します

  • gdb httpd

  • Stop your httpd processes

  • > run -X -f /path/to/httpd.conf

  • ブラウザから問題のある URL にアクセスします

  • > run -X -f /path/to/httpd.conf

  • もしコアダンプが発生すると gdb が知らせてくれます

  • bt とタイプします

  • このバックトレースをバグレポートに含めてください。バグレポートは » https://github.com/php/php-src/issues から送信してください。

もしそのスクリプトが正規表現関数 (preg_match() やその類似関数) を使用している場合、 PHP と Apache が同じ正規表現のパッケージを使用してコンパイルされているかどうかを確認してください。 PHP と Apache 1.3.x を使用している場合は常に確認が必要です。

Unix: RPM を使って PHP をインストールしたのですが、Apache が PHP のページを 処理してくれません。何が起こっているのですか?

あなたが Apache と PHP の両方を RPM でインストールしたとすると、以下に示す 内容の一部もしくは全てを httpd.conf ファイルに追加するか、コメントを 外す必要があります:

# Extra Modules
AddModule mod_php.c
AddModule mod_perl.c

# Extra Modules
LoadModule php_module         modules/mod_php.so
LoadModule php5_module        modules/libphp5.so
LoadModule perl_module        modules/libperl.so
そして以下の行:
AddType application/x-httpd-php .php
以上の内容を全体設定、もしくは PHP サポートを追加したいバーチャル ドメインの設定に加えてください。

Unix: Apache に FrontPage エクステンションのパッチを当てたら、突然 PHP が動作しなくなってしまいました。PHP は Apache の FrontPage エクステンションと共存することはできないのですか?

いいえ。PHP は FrontPage エクステンションと問題なく共存できます。 問題は FrontPage エクステンションのパッチが PHP が依存している Apache の 構造の一部を変更してしまうことにあります。パッチを当てた後で PHP を再コンパイル('make clean; make' としてください)すれば問題は 解決されます。

Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスしても何も表示されません。

ブラウザの「ソースの表示」を実行してください。おそらく PHP の ソースコードが表示されると思います。これはウェブサーバーがスクリプトを PHP に渡していないためスクリプトが実行されていない、ということを 意味します。サーバー側の設定のどこかが間違っているはずですので、 PHP インストールマニュアルに従って再度入念に設定を確認してみてください。

Unix/Windows: PHP をインストールしたのですがブラウザから PHP スクリプトにアクセスすると Internal Server Error 500 となってしまいます。

ウェブサーバーが PHP を実行するときに何らかの問題が起きています。 どんなエラーが起こっているか確認するために、コマンドラインで PHP 実行ファイル(Windows では php.exe) のある ディレクトリに移動して php -i を実行してください。 もし PHP の実行時に問題があった場合は適切なエラーメッセージが表示されるので、 それを手がかりに次に何をすべきかを知ることができます。画面 一杯に HTML(phpinfo() 関数の出力)が表示された場合には PHP は問題なく動作していますので、問題はウェブサーバーの設定 にあるはずです。再度入念にチェックしてみてください。

PHP をインストールするまではエラーもなく問題なく進んだのですが、 Apache を起動させようとすると undefined symbol エラーが発生します。
[mybox:user /src/php5] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress

これは、PHP とは関係なく MySQL クライアントライブラリの問題です。 このライブラリのうちある種のものは --with-zlib を指定する必要がありますが、 他のものは必要ありません。この問題は MySQL FAQ でも扱われています。

Windows: PHP をインストールしたのですがブラウザから PHP スクリプト にアクセスすると次のようなエラーが出力されます。
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:

このエラーメッセージは PHP が(何らかの理由で)何も出力できなかった ことを意味します。詳細なエラーメッセージを得るためには、 コマンドラインから PHP 実行ファイル(Windows では php.exe)のあるディレクトリに移動して php -i を実行してください。もし PHP の実行時に問題 があった場合は適切なエラーメッセージが表示されるのでそれを 手がかりに次に何をすべきかを知ることができます。画面一杯に HTML (phpinfo()関数の出力) が表示された場合には PHP は問題なく動作しています。

PHP がコマンドラインで動作したなら、再度ブラウザから PHP スクリプトに アクセスしてみてください。もしまだ失敗するようなら以下のいずれかの 理由によるものと思われます。

  • PHP スクリプト、 php.exephp5ts.dllphp.ini もしくはロードしようとしている PHP 拡張モジュールの ファイルパーミッションが匿名インターネットユーザー IUSER_<machinename> にアクセスできない ものになっている。
  • スクリプトが存在しない(もしくはあなたが在ると思っている場所と ウェブサーバーのルートディレクトリからの相対位置がずれている)。 IIS を使用している場合は、Internet Service Manager でスクリプト マッピングを設定するときに「ファイルの存在を確認する」にチェックを することでこのエラーをトラップすることができます。もしスクリプト ファイルが存在しない場合はサーバーが代わりに 404 エラーを返すように なります。これにはもう一つ利点があります。それは IIS が スクリプトファイルの NTLanMan パーミッションに応じて認証を要求する ようになる、ということです。
Windows: 全ての説明に従っているのに PHP が IIS で動作しません!

PHP スクリプトを実行しようとするあらゆるユーザーが php.exe の実行権限を必要としているということを 忘れないでください。IIS はインストール時に追加された匿名ユーザーを使用 します。このユーザーに対して php.exe の実行権限が 必要です。また、認証された全てのユーザーに関しても php.exe の実行権限が必要です。IIS4 の場合はさらに PHP がスクリプトエンジンであるということを教えてやる必要があります。 この FAQ も読んでください。

IIS, PWS, OmniHTTPD, Xitami上でCGIとしてPHPを実行するとき、 次のようなエラーが出る:Security Alert! PHP CGI cannot be accessed directly.

cgi.force_redirect0 をセットしてください。デフォルトでは 1 にセットされていますので、そのディレクティブが ; でコメントアウトされていないことを確認してください。 他のディレクティブと同様にこれは php.ini 上でセットされます。

デフォルトは 1 なので、100% 正しく php.ini ファイルが 読み込まれているかどうかが重要です。 詳細はこの FAQ を 読んでください。

php.ini が認識され読み込まれていることをどうやって知ることが できますか? 自分の行った変更が反映されてないらしいのですが。

php.ini とそれが PHP に読み込まれているかを確認するには phpinfo() をコールして最初のほうに 表示されている Configuration File (php.ini) を見てください。これは PHP が認識している php.ini と、それが 読み込まれているか否かを示しています。ディレクトリパスだけが 表示されている場合は、読み込まれていないということなので、 そのディレクトリに php.ini を置いてください。 php.iniPATH にある場合それが読み込まれます。

php.ini が読み込まれていてかつ PHP をモジュールとして実行 している場合、php.ini を変更した後で必ず Web サーバーを 再起動してください。

php_ini_loaded_file() も参照ください。

Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?

Windows では、以下のようにします。

  • コントロールパネルのシステムアイコンを選択します(スタート → コントロールパネル)。

  • 詳細設定タブに移動します。

  • 「環境変数」ボタンを押します。

  • 「システム環境変数」欄を見ます。

  • Path というエントリを見つけます(スクロールする必要があるかもしれません)。

  • Path のエントリをダブルクリックします。

  • その最後に ';' と追加し、その後に PHP のディレクトリを追加します (例: ;C:\php)。

  • OK を押します。

注意: 上の作業を行った後は、必ずコンピュータを再起動し、 PATH の変更が適用されていることを確認しましょう。

Windows 上の PHP で、php.ini を使えるようにするにはどうしたらいいのですか?

いくつかの方法があります。Apache を使用しているのなら、 Apache のドキュメントを参照して下さい。 それ以外の場合は、環境変数 PHPRC を指定する 必要があります。

Apache のコンテントネゴシエーション(MultiViews オプション)を PHP で使用することはできますか?

もしリンクする PHP ファイルが拡張子を持っているなら、すべては うまく動作します。この FAQ が対象としているのは、リンクする PHP ファイルが拡張子を持っておらず、拡張子のない URL から PHP ファイルを判別するためにコンテントネゴシエーションを使用する方法です。 この場合、AddType application/x-httpd-php .php という行を以下のように変更します。

AddHandler php5-script php
AddType text/html php
この方法は、Apache 1 ではうまく動作しません。なぜなら PHP モジュールが php-script をキャッチできないからです。

PHP が処理できるリクエストメソッドは GET および POST だけなのですか?

いいえ、それ以外のいかなるメソッド(例: CONNECT)でも扱えます。 適切な応答ステータスは、header() を使用して送信可能です。 GET および POST だけを処理したいなら、Apache の設定を以下のようにします。

<LimitExcept GET POST>
Deny from all
</LimitExcept>

関連キーワード:  インストール, スクリプト, 実行, 表示, Unix, エラー, 設定, 動作, アクセス, ディレクトリ