PHPのお勉強!

PHP TOP

インストール

このセクションでは 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 がスクリプトエンジンであるということを教えてやる必要があります。