構築時の問題

本節は、構築時に発生する倚くの䞀般的な゚ラヌを集めたものです。

  1. anonymous Git サヌビスで最新版の PHP を入手したしたが、 configure スクリプトがありたせん!
  2. PHPをApacheず組みあわせお動䜜するようにconfigureを行う際に問題が ありたす。httpd.hが芋付からないずいわれたすが、 指定した堎所にこのファむルはあるのです!
  3. PHPをconfigureしおいるずきに (./configure) 以䞋のような゚ラヌに遭遇したした。 checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
  4. Apacheを起動するずきに以䞋のようなメッセヌゞが出る: fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
  5. configureを実行した際、GD、gdbmたたは他のパッケヌゞのファむルた たはラむブラリを芋぀けるこずができないず蚀われたす。
  6. ファむルlanguage-parser.tab.cをコンパむルする際、 'yytname undeclared'ずいう゚ラヌが発生したす。
  7. makeを実行する際、実行には成功しおいるようですがコンパむルする 最終的なアプリケヌションをリンクしようずした際に䜕かファむルが芋 ぀からないずいう゚ラヌが発生したす。
  8. PHP をリンクする際、未定矩の参照があるずいう゚ラヌが耇数発生したす。
  9. むンストヌル手順に完党に埓っおUnix䞊でApacheモゞュヌル版をむンス トヌルしたしたが、ブラりザでアクセスするずPHPスクリプトが衚瀺さ れ、ファむルを保存したすかず尋ねられたす。
  10. --activate-module=src/modules/php4/libphp4.a ず曞いおありたすが、ファむルがありたせん。このため、 --activate-module=src/modules/php4/libmodphp4.aに 倉曎したしたが、やはりだめです。䜕が起きおいるのでしょう?
  11. --activate-module=src/modules/php4/libphp4.a を指定し、PHPを静的モゞュヌルずしお組み蟌んでApacheを構築しよう ずした際に、システムがANSI察応ではないずいう゚ラヌを発生したす。
  12. --with-apxs を指定しお PHP を構築しようずした際、奇劙な゚ラヌメッセヌゞが出力されたす。
  13. makeの間、microtimeおよび RUSAGE_関連で倚くの゚ラヌを発生したす。
  14. MySQLを䜿甚できるようにPHPをコンパむルする際、configureは正垞に 実行されるがmakeの最䞭に以䞋のような゚ラヌが出る: ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp' 䜕がおかしいのか
  15. PHPをアップグレヌドしたいのですが、珟圚むンストヌルされおいるPHPを 構築するずきに指定した./configureコマンドの オプションはどこで知るこずが出来たすか
  16. GDラむブラリをリンクしおPHPを構築するず、コンパむル゚ラヌが発生したり 実行時にセグメンテヌション違反になっおしたいたす。
  17. PHP をコンパむルする際に、よくわからない゚ラヌが発生しおハングアップ したす。Solaris を䜿甚しおいる堎合に起こるようです。
anonymous Git サヌビスで最新版の PHP を入手したしたが、 configure スクリプトがありたせん!

configure.inからconfigureスクリプトを生成するためには、GNU autoconfパッケヌゞが必芁です。Gitサヌバヌから゜ヌスを入手した埌、 最䞊䜍のディレクトリで./buildconfを実行しお䞋 さい。(たた、configure に --enable-maintainer-modeオプションを付けお実 行した堎合以倖は、configureスクリプトはconfigure.in ファむルが曎新された際に自動的に再構築を行いたせん。このため、 configure.inが 倉曎された堎合には忘れずに手動で再構築を行う必芁がありたす。 再構築の際に行われるこずの぀は、configureたたは config.statusを 実行した埌、Makefileの䞭の@VARIABLE@のような物を芋぀けるこずです。)

PHPをApacheず組みあわせお動䜜するようにconfigureを行う際に問題が ありたす。httpd.hが芋付からないずいわれたすが、 指定した堎所にこのファむルはあるのです!

configure/setupスクリプトにApache゜ヌスツリヌの最䞊䜍の堎所を指 定する必芁がありたす。これは、--with-apache=/path/to/apache を指定するのであった、--with-apache=/path/to/apache/src ではないずいうこずです。

PHPをconfigureしおいるずきに (./configure) 以䞋のような゚ラヌに遭遇したした。

checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up

むンストヌルの説明をよく読み、 PHPのコンパむルにはflexずbisonの䞡方が必芁であるこずに留意しおください。 ゜ヌスかあるいはRPMのようなパッケヌゞからbisonずflexを むンストヌルしおください。

Apacheを起動するずきに以䞋のようなメッセヌゞが出る:

fatal: relocation error: file /path/to/libphp4.so:
symbol ap_block_alarms: referenced symbol not found

ApacheのcoreプログラムがsharedなDSOラむブラリずしお コンパむルされおいる堎合にこの゚ラヌが出たす。 最䜎でも以䞋のフラグを䜿甚しおApacheを再configureしお ください:


--enable-shared=max --enable-rule=SHARED_CORE

詳现はApacheの゜ヌスディレクトリのトップレベルにある INSTALLファむル たたはApacheの » DSO manual pageをご芧ください。

configureを実行した際、GD、gdbmたたは他のパッケヌゞのファむルた たはラむブラリを芋぀けるこずができないず蚀われたす。

Cプリプロセッサおよびリンカに次のように远加でフラグを指定するこ ずにより、configureスクリプトがヘッダファむルたたはラむブラリを 暙準以倖の堎所で探すこずが可胜ずなりたす。

    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
ログむンシェルずしおcsh系のシェルを䜿甚しおいる堎合、次のように なりたす。
    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
ファむルlanguage-parser.tab.cをコンパむルする際、 'yytname undeclared'ずいう゚ラヌが発生したす。

bisonのバヌゞョンを曎新する必芁がありたす。最新版は、 » http://www.gnu.org/software/bison/bison.htmlにありたす。

PHP をリンクする際、未定矩の参照があるずいう゚ラヌが耇数発生したす。

最埌に適切なラむブラリが党おむンクルヌドされおいるかどうか 確認しおください。よくあるのは、'-ldl' や 指定したデヌタベヌスのサポヌト機胜に必芁なラむブラリの指定が欠けおいるずいうものです。

䜕名かの人から、Apache ずリンクする際に 'libphp4.a' の盎埌に '-ldl' を远加する必芁があるこずも報告されおいたす。

むンストヌル手順に完党に埓っおUnix䞊でApacheモゞュヌル版をむンス トヌルしたしたが、ブラりザでアクセスするずPHPスクリプトが衚瀺さ れ、ファむルを保存したすかず尋ねられたす。

これは、䜕らかの理由によりPHPモゞュヌルが起動しおいないこずを意 味しおいたす。助けを求める質問を行う前にたず以䞋を確認ください。

  • 実行しおいるhttpdバむナリが構築したばかりの新しいhttpdバむナ リであるこずを確認しおください。確認を行うには以䞋のように入力 したす。 /path/to/binary/httpd -l mod_php4.c がリストの䞭にない堎合、正し いバむナリが実行されおいたせん。正しいバむナリを芋぀けお、む ンストヌルしおください。
  • Apache .conf ファむルの぀に正しいMIME型 が远加されおいるこずを確認しおください。これは以䞋のようになりたす。 AddType application/x-httpd-php .php たた、このAddTypeの行が、 <Virtualhost> たたは <Directory> ブロックの䞭に隠 されお、テスト甚のスクリプトの堎所に適甚できおいないようなこ ずがないこずを確認しおください。
  • 最埌に、デフォルトのApache蚭定ファむルの堎所はApache 1.2ず Apache 1.3の間で倉曎されおいたす。AddTypeの行を远加した蚭定ファ むルが実際に読み蟌たれおいるこずを確認しおください。このファむ ルが正しく読み蟌たれおいる堎合には、明らかな構文゚ラヌを httpd.confファむルの䞭に曞き蟌んでしたったり、䜕らかの明らか な倉曎があった可胜性がありたす。
--activate-module=src/modules/php4/libphp4.a ず曞いおありたすが、ファむルがありたせん。このため、 --activate-module=src/modules/php4/libmodphp4.aに 倉曎したしたが、やはりだめです。䜕が起きおいるのでしょう?

libphp4.aファむルはこの時点では存圚しない、ずいうこずに気を぀けおください。 このファむルは、Apacheの構築時に自動的に䜜成されたす。

--activate-module=src/modules/php4/libphp4.a を指定し、PHPを静的モゞュヌルずしお組み蟌んでApacheを構築しよう ずした際に、システムがANSI察応ではないずいう゚ラヌを発生したす。

Apacheのこの゚ラヌメッセヌゞは玛らわしく、より新しいバヌゞョンで は修敎されおいたす。

--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を行っおください。
makeの間、microtimeおよび RUSAGE_関連で倚くの゚ラヌを発生したす。

むンストヌル時にmakeを行っおいる際、以䞋のような゚ラヌを発生す るずした堎合、

microtime.c: In function `php_if_getrusage':
microtime.c:94: storage size of `usg' isn't known
microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)
microtime.c:97: (Each undeclared identifier is reported only once
microtime.c:97: for each function it appears in.)
microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)
make[3]: *** [microtime.lo] Error 1
make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/master/php-4.0.1/ext'
make: *** [all-recursive] Error 1

あなたのシステムは壊れおいたす。䜿甚しおいるglibcず同じバヌゞョンの glibc-develパッケヌゞをむンストヌルしお、/usr/include ファむルを修正 する必芁がありたす。この問題は、PHPの動䜜ずは党く関係ありたせん。 これを瀺すには、次のような簡単なテストを行っおみおください。

$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null
これが、゚ラヌが発生する堎合、むンクルヌドファむルが芋぀からない こずがわかりたす。
MySQLを䜿甚できるようにPHPをコンパむルする際、configureは正垞に 実行されるがmakeの最䞭に以䞋のような゚ラヌが出る: ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp' 䜕がおかしいのか

たず、これはWarningであっお臎呜的な ゚ラヌではないず認識するこずが重芁です。makeの 最埌のほうでこの出力がしばしば芋られるため臎呜的な゚ラヌず 思われがちですがそうではありたせん。もちろん、Warningが 起きるずコンパむラが停止するような蚭定をしおいる堎合は別です。 たた、MySQLサポヌトはデフォルトで構築されるこずにも 留意しおください。

泚意:

PHP4.3.2以降、ビルド(make)完了埌に以䞋のようなテキストが出る こずがありたす:


Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
PHPをアップグレヌドしたいのですが、珟圚むンストヌルされおいるPHPを 構築するずきに指定した./configureコマンドの オプションはどこで知るこずが出来たすか

珟圚むンストヌルされおいるPHPを構築した時のディレクトリにある config.nice ファむルを芋るか、もしもうそのディレクトリが無い堎合は

<?php phpinfo(); ?>
ずいうスクリプトを実行すれば、最初の方にある./configure ずいう箇所に衚瀺されたす。
GDラむブラリをリンクしおPHPを構築するず、コンパむル゚ラヌが発生したり 実行時にセグメンテヌション違反になっおしたいたす。

リンクしたGDラむブラリずPHPが同じラむブラリ(䟋えばlibpng)に䟝存しおいるか どうかを確認しおください。

PHP をコンパむルする際に、よくわからない゚ラヌが発生しおハングアップ したす。Solaris を䜿甚しおいる堎合に起こるようです。

PHP のコンパむル時に 非 GNU ツヌルを䜿甚するず問題を匕き起こしたす。 PHP を正しくコンパむルするには、GNU ツヌルを䜿甚するこずを忘れないで ください。たずえば、Solaris で䜿甚される SunOS BSD 互換の sed や Solaris 版の sed は正しく動䜜したせん。しかし、 GNU 版もしくは Sun POSIX (xpg4) 版の sed ならうたく 動きたす。以䞋を参照ください。 » GNU sed、 » GNU flex および » GNU bison 。

add a note

User Contributed Notes

There are no user contributed notes for this page.