Manußl PHP | ||
---|---|---|
P°edchßzejφcφ | Dal╣φ |
Tato sekce shrnuje nejΦast∞j╣φ chyby, kterΘ se vyskytujφ p°i sestavovßnφ PHP.
1. Pomocφ anonymnφho p°φstupu do CVS jsem zφskal poslednφ verzi PHP, ale chybφ v nφ skript "configure"!
Musφte mφt nainstalovan² balφk "GNU autoconf", tak╛e m∙╛ete vygenerovat skript "configure" z "configure.in". Po sta╛enφ zdrojov²ch soubor∙ z CVS serveru spus╗te ./buildconf z nejvy╣╣φ adresß°ovΘ ·rovn∞ (pokud nespustφte "configure" s parametrem --enable-maintainer-mode, skript "configure" nebude automaticky aktualizovßn p°i zm∞n∞ souboru "configure.in", tak╛e se musφte ujistit, zda jste to ud∞lali ruΦn∞ potΘ, co byl "configure.in" zm∞n∞n. Jednφm z p°φznak∙ tohoto je nalezenφ element∙ jako @VARIABLE@ v souboru "Makefile" potom, co byl spu╣t∞n "configure" nebo "config.status").
2. Mßm problΘm nakonfigurovat PHP tak, aby fungovalo se serverem Apache. Hlßsφ, ╛e nem∙╛e najφt httpd.h, ale ten je p°esn∞ tam, kde jsem uvedl, ╛e je!
Pot°ebujete sd∞lit konfiguraΦnφmu/instalaΦnφmu skriptu umφst∞nφ nejvy╣╣φ ·rovn∞ zdrojov²ch soubor∙ Apache. To znamenß, ╛e specifikujete '--with-apache=/path/to/apache' a ne '--with-apache=/path/to/apache/src'.
3. Kdy╛ spustφm "configure", hlßsφ to, ╛e nem∙╛e najφt "include" soubory nebo knihovny pro GD, gdbm a n∞jakΘ dal╣φ balφky!
M∙╛ete urΦit, aby skript "configure" hledal hlaviΦkovΘ soubory a knihovny na nestandardnφch mφstech specifikacφ pomocn²ch p°φznak∙ pro C preprocesor a linker, nap°φklad:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure |
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure |
4. Kdy╛ se kompiluje soubor language-parser.tab.c, hlßsφ to chyby, kterΘ °φkajφ 'yytname undeclared'.
Musφte updatovat va╣i verzi programu Bison. Nejnov∞j╣φ verzi najdete na ftp://ftp.gnu.org/pub/gnu/bison/.
5. Kdy╛ spustφm "make", zdß se, ╛e b∞╛φ dob°e, ale havaruje, kdy╛ se pokou╣φ sestavit koneΦnou aplikaci s hlß╣enφm, ╛e nem∙╛e najφt n∞jakΘ soubory.
N∞kterΘ star╣φ verze programu "make" neuklßdajφ korektn∞ zkompilovanΘ verze soubor∙ umφst∞n²ch v adresß°i funkcφ do tΘho╛ adresß°e. Zkuste spustit "cp *.o functions" a potom znovu 'make', abyste vid∞li, zda to pomohlo. Pokud ano, m∞li byste opravdu nainstalovat nejnov∞j╣φ verzi "GNU make".
Podφvejte se do °ßdku, kde je popsßno sestavovßnφ a ujist∞te se, ╛e byly p°idßny na konec v╣echny pot°ebnΘ knihovny. ╚asto se stßvß, ╛e chybφ '-ldl' a n∞kterΘ knihovny pot°ebnΘ pro podporu databßze, kterou jste urΦili.
Pokud sestavujete pro Apache 1.2.x, nezapomn∞li jste p°idat odpovφdajφcφ informace na °ßdek EXTRA_LIBS v souboru "configure" a spustit skript pro konfiguraci Apache? Pro vφce informacφ se podφvejte do souboru INSTALL, kter² zφskßte s distribuΦnφm balφkem.
N∞kte°φ lidΘ takΘ hlßsili, ╛e pokud sestavovali pro Apache, museli p°idat '-ldl' t∞sn∞ za 'libphp4.a'.
Toto je nynφ velmi snadnΘ. Nßsledujte peΦliv∞ tyto kroky:
Stßhn∞te nejnov∞j╣φ distribuci Apache 1.3 z http://www.apache.org/dist/.
Rozbalte ji n∞kam, nap°φklad do /usr/local/src/apache-1.3.
Zkompilujte PHP nejd°φve spu╣t∞nφm ./configure --with-apache=/<path>/apache-1.3 (nahra∩te <path> aktußlnφ cestou k adresß°i apache-1.3).
Napi╣te 'make' a potom 'make install' k sestavenφ PHP a zkopφrovßnφ pot°ebn²ch soubor∙ do distribuΦnφho stromu Apache.
Zm∞≥te adresß° na /<path>/apache-1.3/src a upravte soubor Configuration. Do souboru p°idejte: AddModule modules/php4/libphp4.a.
Spus╗te './Configure' a potom 'make'.
Nynφ byste m∞li mφst hotovΘ soubory httpd pro prßci s PHP.
Poznßmka: : M∙╛ete pou╛φt takΘ nov² skript ./configure pro Apache. P°eΦt∞te si instrukce v README.configure, kter² je v distribuci Apache. NahlΘdn∞te takΘ do souboru INSTALL z distribuce PHP.
8. Postupoval jsem p°esn∞ podle instrukcφ k instalaci PHP ve verzi jako modul pro Apache na UNIXu, a moje PHP skripty se zobrazujφ v prohlφ╛eΦi nebo se je prohlφ╛eΦ sna╛φ ulo╛it jako soubory.
To znamenß, ╛e PHP modul nenφ z n∞jak²ch d∙vod∙ vyvolßvßn. D°φve, ne╛ budete shßn∞t dal╣φ pomoc, zkontrolujte t°i v∞ci:
Ujist∞te se, ╛e se spou╣tφ prßv∞ ten httpd, kter² jste zkompilovali. Zkuste spustit /path/to/binary/httpd -l
Pokud v seznamu neuvidφte mod_php4.c, potom nespou╣tφte sprßvnou verzi httpd. Najd∞te s instalujte sprßvnou verzi.
Ujist∞te se, ╛e jste p°idali sprßvnou specifikaci Mime Type do soubor∙ .confpro Apache. M∞lo by tam b²t: AddType application/x-httpd-php3 .php3 (pro PHP 3)
nebo AddType application/x-httpd-php .php (pro PHP 4)
TakΘ se ujist∞te, ╛e tento °ßdek AddType nenφ ukryt uvnit° bloku <Virtualhost> nebo <Directory>, co╛ m∙╛e zabrßnit aplikaci pravidla na oblast, kde je umφst∞n testovacφ skript.
KoneΦn∞, implicitnφ umφst∞nφ konfiguraΦnφch soubor∙ Apache se mezi verzemi Apache 1.2 a 1.3 zm∞nilo. M∞li byste ov∞°it, ╛e soubor, do kterΘho jste p°idali °ßdek AddType je ten, kter² je skuteΦn∞ naΦφtßn. M∙╛ete zkusit vlo╛it n∞jakou p°φ╣ernou syntaktickou chybu do souboru httpd.conf nebo ud∞lat n∞jakou jinou zm∞nu tohoto rßzu - uvidφte, zda je soubor sprßvn∞ naΦφtßn.
9. Hlßsφ to pou╛itφ --activate-module=src/modules/php4/libphp4.a, ale tento soubor neexistuje; proto jsem to zm∞nil na --activate-module=src/modules/php4/libmodphp4.a a ono to nefunguje? O co jde?
Uv∞domte si, ╛e soubor libphp4.a nemß existovat. Vytvß°φ ho proces serveru Apache!
10. Kdy╛ zkusφm sestavit Apache s PHP jako╛to statick²m modulem pomocφ --activate-module=src/modules/php4/libphp4.a, hlßsφ to, ╛e m∙j kompilßtor nevyhovuje ANSI.
Toto je zavßd∞jφcφ chybovΘ hlß╣enφ, kterΘ bylo odstran∞no v pozd∞j╣φch verzφch.
Je t°eba zkontrolovat t°i v∞ci. Nejd°φve, z d∙vodu, ╛e kdy╛ Apache vytvß°φ apxs skript v Perlu, n∞kdy ukonΦφ kompilaci bez odpovφdajφcφch prom∞nn²ch. Najd∞te skript apxs (zkuste p°φkaz 'which apxs', n∞kdy b²vß v /usr/local/apache/bin/apxs nebo /usr/sbin/apxs). Otev°te ho a zkontrolujte °ßdky podobnΘ t∞mto:
my $CFG_CFLAGS_SHLIB = 'á'; # nahrazeno pomocφ Makefile.tmpl my $CFG_LD_SHLIB = 'á'; # nahrazeno pomocφ Makefile.tmpl my $CFG_LDFLAGS_SHLIB = 'á'; # nahrazeno pomocφ Makefile.tmpl |
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = 'gcc'; # nahrazeno pomocφ Makefile.tmpl my $CFG_LDFLAGS_SHLIB = q(-shared); # nahrazeno pomocφ Makefile.tmpl |
my $CFG_LIBEXECDIR = 'modules'; # nahrazeno pomocφ APACI install |
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # nahrazeno pomocφ APACI install |
During the 'make' portion of installation, if you encounter problems that look similar to this:
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 |
Vß╣ systΘm je po╣kozen. Musφte opravit soubory v /usr/include instalacφ balφku glibc-devel, kter² pat°φ k va╣emu glibc. Nemß to absolutn∞ nic spoleΦnΘho s PHP. D∙kaz zφskßte tφmto jednoduch²m testem:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null |
13. Chci upgradovat svΘ PHP. Kde najdu tvar °ßdku ./configure, kter² byl pou╛it pro sestavenφ stßvajφcφ instalace PHP?
Kdy╛ se podφvßte do souboru config.nice ve zdrojovΘm stromu souΦasnΘ instalace PHP. Nenφ-li k dispozici, jednodu╣e spus╗te skript
P°edchßzejφcφ | Dom∙ | Dal╣φ |
Instalace | Nahoru | Pou╛φvßnφ PHP |