このセクションでは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: |
PHPはグルー(糊)です。このグルーは、多くのサードパーティ製のライブラリを くっつけることによりクールなWebアプリケーションを構築するために使用され、 直観的で簡単に習得できる言語インターフェイスにより、一つの整合性のある実体として 見せることができます。 PHPの柔軟性と力は、プラットフォームの安定性とロバスト性に基づいています。 グルーによる結合するためには、OSやWebサーバ、サードパーティ製のライブラリを 必要とします。 これらの一つの機能が停止した場合、PHPは問題を同定し、速やかに修正する 手段を必要とします。 実行スレッドを完全に分離しなかったり、 メモリセグメントを完全に分離しなかったり、 各リクエストで使用される強力なサンドボックスを有さないことで、 基本的なフレームワークをより複雑なものにした場合、 弱点がPHPのシステムに生まれます。
マルチスレッドMPMを使用する必要がある場合、 PHPが自分のメモリ空間で実行されるFastCGI設定を観てみてください。
最後に、この警告はマルチスレッドMPMの使用に対するものですが、 Windowsシステムではより多くのライブラリがスレッドセーフである傾向が あるため、この警告の度合はより弱くなります。
UNIXの場合、デフォルトでは/usr/local/lib です。コンパイル時に --with-config-file-path オプションを使用してこの場所を変えたいという人も多いでしょう。 例えばこのようにすることも出来ます:
--with-config-file-path=/etc |
--with-config-file-scan-dir=PATH |
ウィンドウズの場合、php.iniのデフォルトパスはWindowsディレクトリになります。 Apacheウェブサーバを使っている場合はまずApacheがインストールされているディレクトリ (例えばc:\program files\apache group\apacheにある php.iniを探そうとします。このため、異なるphp.iniファイルを異なるバージョンの Apacheごとに置いておくことができます。
設定ファイルの章も参照してください。
3. 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 とタイプします
このバックトレースをバグレポートに含めてください。バグレポートは 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 The %build section will look something like this:
./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 |
6. 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は問題なく動作していますので、問題はウェブサーバの設定 にあるはずです。再度入念にチェックしてみてください。
9. 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でも扱われています。
10. 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パーミッションに応じて認証を要求す るようになる、ということです。
PHPスクリプトを実行しようとするあらゆるユーザが php.exeの実行権限を必要としているということを忘 れないでください。IISはインストール時に追加された匿名ユーザを使用し ます。このユーザに対してphp.exeの実行権限が必要 です。また、認証された全てのユーザに関しても php.exeの実行権限が必要です。IIS4の場合はさらに PHPがスクリプトエンジンであるということを教えてやる必要があります。 このFAQも 読んでください。
12. When running PHP as CGI with IIS, PWS, OmniHTTPD or Xitami, I get the following error: Security Alert! PHP CGI cannot be accessed directly.. IIS, PWS, OmniHTTPD, Xitami上でCGIとしてPHPを実行するとき、 次のようなエラーが出る:Security Alert! PHP CGI cannot be accessed directly.
cgi.force_redirect に0をセットしてください。デフォルトでは 1にセットされていますので、そのディレクティブ が;でコメントアウトされていないことを確認してください。 他のディレクティブと同様にこれは php.ini 上でセットされます。
デフォルトは1なので、100%正しくphp.iniファイルが 読み込まれているかどうかが重要です。 詳細はこのFAQを 読んでください。
php.iniとそれがPHPに読み込まれているかを確認するには phpinfo()をコールして最初のほうに 表示されているConfiguration File (php.ini) を見てください。これはPHPが認識しているphp.ini と、それが 読み込まれているか否かを示しています。ディレクトリパスだけが 表示されている場合は、読み込まれていないということなので、 そのディレクトリにphp.iniを置いてください。 php.iniがPATHにある場合それが読み込まれます。
php.iniが読み込まれていてかつPHPをモジュールとして実行 している場合、php.iniを変更した後で必ずWebサーバを 再起動してください。
On Windows NT, 2000, XP and 2003:
Go to Control Panel and open the System icon (Start -> Settings -> Control Panel -> System, or just Start -> Control Panel -> System for Windows XP/2003)
Go to the Advanced tab
Click on the 'Environment Variables' button
Look into the 'System Variables' pane
Find the Path entry (you may need to scroll to find it)
Double click on the Path entry
Enter your PHP directory ant the end, including ';' before (e.g. ;C:\php)
Press OK and restart your computer
On Windows 98/Me you need to edit the autoexec.bat file:
Open the Notepad (Start -> Run and enter notepad)
Open the C:\autoexec.bat file
Locate the line with PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... and add: ;C:\php to the end of the line
Save the file and restart your computer
The PHP manual used to promote the copying of files into the Windows system directory, this is because this directory (C:\Windows, C:\WINNT, etc.) is by default in the systems PATH. Copying files into the Windows system directory has long since been deprecated and may cause problems.
There are several ways of doing this. If you are using Apache, read their installation specific instructions (Apache 1, Apache 2), otherwise you must set the PHPRC environment variable:
On Windows NT, 2000, XP and 2003:
Go to Control Panel and open the System icon (Start -> Settings -> Control Panel -> System, or just Start -> Control Panel -> System for Windows XP/2003)
Go to the Advanced tab
Click on the 'Environment Variables' button
Look into the 'System variables' pane
Click on 'New' and enter 'PHPRC' as the variable name and the directory where php.ini is located as the variable value (e.g. C:\php)
Press OK and restart your computer
On Windows 98/Me you need to edit the autoexec.bat file:
Open the Notepad (Start -> Run and enter notepad)
Open the C:\autoexec.bat file
Add a new line to the end of the file: set PHPRC=C:\php (replace C:\php with the directory where php.ini is located). Please note that the path cannot contain spaces. For instance, if you have installed PHP in C:\Program Files\PHP, you would enter C:\PROGRA~1\PHP instead.
Save the file and restart your computer
If links to PHP files include extension, everything works perfect. This FAQ is only for the case when links to PHP files don't include extension and you want to use content negotiation to choose PHP files from URL with no extension. In this case, replace the line AddType application/x-httpd-php .php with:
# PHP 4 AddHandler php-script php AddType text/html php # PHP 5 AddHandler php5-script php AddType text/html php |