第 49 章 構築時の問題

本節では、構築時に発生する多くの一般的なエラーを集めたものです。

1. anonymous CVSサービスにより最新版のPHPを入手しましたが、 configureスクリプトがありません!
2. PHPをApacheと組みあわせて動作するようにconfigureを行う際に問題が あります。httpd.hが見付からないといわれますが、指定した場所にこ のファイルはあるのです!
3. configureを実行した際、GD、gdbmまたは他のパッケージのファイルま たはライブラリを見つけることができないと言われます。
4. ファイルlanguage-parser.tab.cをコンパイルする際、 'yytname undeclared'というエラーが発生します。
5. 'make'を実行する際、実行には成功しているようですがコンパイルする 最終的なアプリケーションをリンクしようとした際に何かファイルが見 つからないというエラーが発生します。
6. PHPをリンクする際、未定義の参照があるというエラーが複数発生しま す。
7. PHPをApache 1.3と組み合わせて構築する手法が分かりません。
8. インストール手順に完全に基づきUNIX上でApacheモジュール版をインス トールしましたが、ブラウザでアクセスするとPHPスクリプトが表示さ れ、ファイルを保存しますかと尋ねられます。
9. --activate-module=src/modules/php4/libphp4.a と書いてありますが、ファイルがありません。このため、 --activate-module=src/modules/php4/libmodphp4.a に 変更しましたが、やはりだめです。何が起きているのでしょう?
10. --activate-module=src/modules/php4/libphp4.a を指定し、PHPを静的モジュールとして組み込んでApacheを構築しよう とした際に、システムがANSI対応ではないというエラーを発生します。
11. --with-apxs を指定してPHPを構築しようとした際、 奇妙なエラーメッセージが出力されます。
12. 'make'の間、microtimeおよび'RUSAGE_'関連で多くのエラーを発生しま す。
13. PHPをアップグレードしたいのですが、現在インストールされているPHPを 構築するときに指定した ./configure コマンドの オプションはどこで知ることが出来ますか?
14. GDライブラリをリンクしてPHPを構築すると、コンパイルエラーが発生したり 実行時にセグメンテーション違反になってしまいます。

5. 'make'を実行する際、実行には成功しているようですがコンパイルする 最終的なアプリケーションをリンクしようとした際に何かファイルが見 つからないというエラーが発生します。

古いバージョンのmakeには、functionsディレクトリにあるファイルの コンパイルされたものを同じディレクトリに正しく入れないものがあり ます。" cp *.o functions "を試しに実行してから ' make ' を再度実行し、解決されるか確認して下さ い。解決される場合には、GNU makeの最近のバージョンに更新するべき です。

7. PHPをApache 1.3と組み合わせて構築する手法が分かりません。

この手順は実際には非常に簡単です。以下の手順に注意深く従って下さ い。

  • http://www.apache.org/dist/ から最新 のApache 1.3配布ファイルを取得して下さい。

  • これをどこか、例えば、 /usr/local/src/apache-1.3 で ungzip、untarして下さい。

  • まず、 ./configure --with-apache=/ path /apache-1.3 を実行し、PHP をコンパイルして下さい。 ( path の部分は実際のapache-1.3ディレクトリのパスに置 き換えて下さい)

  • ' make ' を実行した後、' make install 'を実行して下さい。これにより、PHPが構築され、 必要なファイルがApacheのソースツリーにコピーされます。

  • ディレクトリを / path /apache-1.3/src に移動し、 Configuration ファイルを編集して下さい。 このファイルに以下を追加して下さい。: AddModule modules/php4/libphp4.a

  • ' ./Configure ' を実行した後、' make 'を実行して下さい。

  • 以上の手順によりPHP対応のhttpdバイナリが構築できました。



注意: : Apache の新しい ./configure スクリプトを使用することも可能です。 Apache配布ファイルの README.configure ファイル の指示を参照下さい。また、PHP配布ファイルの INSTALL ファイルも参照下さい。

これは、何らかの理由によりPHPモジュールが起動していないことを意 味しています。助けを求める質問を行う前にまず以下を確認下さい。

  • 実行しているhttpdバイナリが構築したばかりの新しいhttpdバイナ リであることを確認して下さい。確認を行うには以下のように入力 します。 /path/to/binary/httpd -l

    mod_php3.c または mod_php4.c がリストの中にない場合、正し いバイナリが実行されていません。正しいバイナリを見つけて、イ ンストールして下さい。

  • Apache .conf ファイルの1つに正しいMIME型 が追加されていることを確認して下さい。これは以下のようになり ます。 AddType application/x-httpd-php3 .php3 (PHP 3の場合)

    または AddType application/x-httpd-php .php (PHP 4の場合)

    また、このAddTypeの行が、 Virtualhost または Directory ブロックの中に隠 されて、テスト用のスクリプトの場所に適用できていないようなこ とがないことを確認して下さい。

  • 最後に、デフォルトのApache設定ファイルの場所はApache 1.2と Apache 1.3の間で変更されています。AddTypeの行を追加した設定ファ イルが実際に読み込まれていることを確認して下さい。このファイ ルが正しく読み込まれている場合には、明らかな構文エラーを httpd.confファイルの中に書き込んでしまったり、何らかの明らか な変更があった可能性があります。



10. --activate-module=src/modules/php4/libphp4.a を指定し、PHPを静的モジュールとして組み込んでApacheを構築しよう とした際に、システムがANSI対応ではないというエラーを発生します。

Apacheのこのエラーメッセージは紛らわしく、より新しいバージョンで は修整されています。

11. --with-apxs を指定してPHPを構築しようとした際、 奇妙なエラーメッセージが出力されます。

ここでは、確認すべきことが3点あります。まず、何らかの理由により、 Apacheがapxs Perlスクリプトを構築する際に適当なコンパイラやフラ グ変数を付けないで構築されてしまうことが時々あります。 使用するapxsの場所を見つけたら('which apxs'コマンドを試してみて ください。/usr/local/apache/bin/apxsまたは/usr/sbin/apxs等にあり ます)、以下の行を確認して下さい。

my $CFG_CFLAGS_SHLIB  = ' ';          # substituted via
Makefile.tmpl
my $CFG_LD_SHLIB      = ' ';          # substituted via
Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' ';          # substituted via
Makefile.tmpl
上記のようになっている場合は問題です。これらの行は空白になっているか 'q()'のような正しくない値になっていると思います。これを以下のように 変更して下さい。
my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # substituted via
Makefile.tmpl
my $CFG_LD_SHLIB      = 'gcc';                   # substituted via
Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared);              # substituted via
Makefile.tmpl
可能性のある第2の問題は、RedHat-6.1と6.2でのみ存在する問題です。 RedHatが出荷した apxs スクリプトは壊れています。以下の行を見て下さい。
my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI
install
上の行がある場合、これを次のように変更して下さい。
my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI
install
最後に、Apacheのconfigure/再インストールを行います。その際、 './configure' と'make'の間に'make clean'を行って下さい。