このセクションではPHPのインストール方法に関する一般的な質問扱います。 PHPは(OSX以前のMacOSを除けば)ほとんど全てのOSと、ウェブサーバで利用 可能です。
PHPをインストールには、ディストリビューションに含まれるINSTALLファイルの説明に従っ てください。ウィンドウズユーザの場合は加えてinstall.txtファイルも読む必要 があります。またウィンドウズユーザのための役立つヒントがここにあります。
[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress |
cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are: |
UNIXの場合、デフォルトでは/usr/local/lib です。コンパイル時に --with-config-file-path オプションを使用してこの場所を変えたいという人も多いでしょう。 例えばこのようにすることも出来ます:
--with-config-file-path=/etc |
ウィンドウズの場合、php.iniのデフォルトパス はWindowsディレクトリになります。
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を使用している場合は常に確認が必要です。
あなたが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 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 \ |
./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 |
5. Unix: ApacheにFrontPageエクステンションのパッチを当てたら、突然 PHPが動作しなくなってしまいました。PHPはApacheのFrontPageエクス テンションと共存することはできないのですか?
いいえ。PHPはFrontPageエクステンションと問題なく共存できます。問 題はFrontPageエクステンションのパッチがPHPが依存しているApacheの 構造の一部を変更してしまうことにあります。パッチを当てた後でPHP を再コンパイル('make clean; make'として下さい)すれば問題は解決さ れます。
ブラウザの「ソースの表示」を実行してください。おそらくPHPのソー スコードが表示されると思います。これはウェブサーバがスクリプトを PHPに渡していないためスクリプトが実行されていない、ということを 意味します。サーバ側の設定のどこかが間違っているはずですので、 PHPインストールマニュアルに従って再度入念に設定を確認してみてく ださい。
ウェブサーバが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パーミッションに応じて認証を要求す るようになる、ということです。