Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

第 48 章 インストール

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

PHPをインストールには、ディストリビューションに含まれるINSTALLファイルの説明に従っ てください。ウィンドウズユーザの場合は加えてinstall.txtファイルも読む必要 があります。またウィンドウズユーザのための役立つヒントがここにあります。

1. Unix/Windows: php.iniファイルはどこに置けばよいのですか?
2. Unix: PHPをインストールしましたが、ファイルをロードするたびに 'Document Contains No Data(ページが表示できません)'というメッ セージが表示されます。何が起こっているのですか?
3. Unix: RPMを使ってPHPをインストールしたのですが、ApacheがPHPのページを 処理してくれません。何が起こっているのですか?
4. Unix: PHP 3をRPMを使ってインストールしたのですが、そのRPMは私が必 要なデータベースサポートなしでコンパイルされたものでした。どうす ればよいですか?
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/php4] 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で動作しません!

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

UNIXの場合、デフォルトでは/usr/local/lib です。コンパイル時に --with-config-file-path オプションを使用してこの場所を変えたいという人も多いでしょう。 例えばこのようにすることも出来ます:
--with-config-file-path=/etc
そしてディストリビューションのphp.ini-dist/etc/php.iniにコピーして環境に合うように 編集してください。

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

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

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

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

  • httpdを停止します

  • gdb httpd

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

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

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

  • bt とタイプします

  • このバックトレースをバグレポートに含めてください。バグレポートは http://bugs.php.net/ から送信してください。

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

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

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

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

4. Unix: PHP 3をRPMを使ってインストールしたのですが、そのRPMは私が必 要なデータベースサポートなしでコンパイルされたものでした。どうす ればよいですか?

PHP 3のビルド方法の制約により、どの環境にも対応できる柔軟なPHPの RPMを作成するのは困難です。この問題に関してはPHP 4で取り組んでい ます。PHP 3ではとりあえずPHPディストリビューションの INSTALL.REDHATファイルで説明されている方法を用いることをお勧めし ます。もしどうしてもRPMバージョンのPHP 3を使う、という場合は続き をお読みください。

RPMのパッケージャはインストール処理を単純化するため、 そして標準の/usr/local/ディレクトリではなく/usr/を使 用するためにデータベースサポート無しのRPMを作成しています。デー タベースサポートを追加するにはRPM specファイルにサポートするデー タベースの種類と最上位ディレクトリを指定する必要があります。

以下の例は広く使われているMySQLデータベースサポートを追加して Apacheモジュールをインストールする場合について説明しています。

もちろん以下の全ての情報はPHPがサポートするいずれのデータベース の場合でも対象箇所を適宜変更すれば対応可能です。この場合はMySQL とApache共にRPMのみを使ってインストールしたものと仮定しています。

  • まずmod_php3を削除します :
    rpm -e mod_php3

  • ソースRPMを手に入れてインストールします。--rebuildではありません。
    rpm -Uvh mod_php3-3.0.5-2.src.rpm

  • /usr/src/redhat/SPECS/mod_php3.specを編集します

    %buildセクションに追加するデータベースサポートとそのパスを記述します。

    MySQLの場合は以下のようになります。
    --with-mysql=/usr \
    %buildセクションは例えば以下のようになるでしょう
    ./configure --prefix=/usr \
     --with-apxs=/usr/sbin/apxs \
     --with-config-file-path=/usr/lib \
     --enable-debug=no \
     --enable-safe-mode \
     --with-exec-dir=/usr/bin \
     --with-mysql=/usr \
     --with-system-regex

  • 変更が終了したら以下のようにしてバイナリRPMを構築します:
    rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

  • インストールします。
    rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

Apacheを再起動するのを忘れないでください。そうすればPHP 3には MySQLサポートが追加されているはずです。ただ、ディストリビューショ ンのtarファイルから構築してそこに含まれる INSTALL.REDHATファイルにしたがった方がおそ らくずっと簡単である、ということも忘れないでください。

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

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

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

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

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

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

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

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

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:

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

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

  • PHPスクリプト, php.exe, php4ts.dll, php.iniもしくはロードしようとしているPHPエクステンションの ファイルパーミッションが匿名インターネットユーザ IUSER_<machinename>にアクセスできな いものになっている。

  • スクリプトが存在しない(もしくはあなたが在ると思っている場所と ウェブサーバのルートディレクトリからの相対位置がずれている)。 IISを使用している場合は、Internet Service Managerでスクリプト マッピングを設定するときに「ファイルの存在を確認する」にチェッ クをすることでこのエラーをトラップすることができます。もしスク リプトファイルが存在しない場合はサーバが代わりに404エラーを返 すようになります。これにはもう一つ利点があります。それはIISが スクリプトファイルのNTLanManパーミッションに応じて認証を要求す るようになる、ということです。

10. Windows: 全ての説明に従っているのにPHPがIISで動作しません!

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