Kapitola 47. Instalace

Tato Φßst se zab²vß Φast²mi otßzkamni ohledn∞ zp∙sobu instalace PHP. PHP je dostupnΘ pro v∞t╣inu OS (v podstat∞ krom∞ MacOS p°e OSX) a v∞t╣inu webovsk²ch server∙.

P°i instalaci PHP postupujte podle instrukcφ v souboru INSTALL v p°φslu╣nΘ distribuci. U╛ivatelΘ Windows by si takΘ m∞li p°eΦφst soubor install.txt. Existuje takΘ soubor s r∙zn²mi fintami pro Windows - najdete ho tady.

1. Unix/Windows: Kde by m∞l b²t ulo╛en soubor php.ini?
2. UNIX: Nainstaloval jsem PHP, ale v╛dy, kdy╛ naΦφtßm dokument, dostanu zprßvu 'Document Contains No Data'! O co jde?
3. UNIX: Instaloval jsem PHP z balφΦk∙ RPM, ale Apache nezpracovßvß strßnky s PHP! O co tu jde?
4. UNIX: Instaloval jsem PHP 3 z balφΦk∙ RPM, ale nekompiluje se s podporou databßze, kterou pot°ebuji! O co tu jde?
5. UNIX: P°idal jsem do Apache patch pro FrontPage Extension a PHP nßhle p°estalo pracovat. Je PHP nekompatibilnφ s FrontPage Extension pro Apache?
6. UNIX/Windows: Nainstaloval jsem PHP, ale p°i pokusu naΦφst soubor PHP skriptu do prohlφ╛eΦe se zobrazφ pouze prßzdnß obrazovka.
7. UNIX/Windows: Nainstaloval jsem PHP a kdy╛ chci naΦφst PHP soubor do prohlφ╛eΦe, objevφ se "500 Internal Server Error".
8. N∞kterΘ operaΦnφ systΘmy: Nainstaloval jsem PHP bez chyb, ale nynφ, kdy╛ zkusφm spustit Apache, ohlßsφ se chyby o nedefinovan²ch symbolech:
[mybox:user /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress
9. Windows: Nainstaloval jsem PHP, ale p°i naΦtenφ strßnky do prohlφ╛eΦe se zobrazφ chyba:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:
10. Windows: Dodr╛el jsem v╣echny instrukce, ale PHP a IIS stßle odmφtajφ spolupracovat!

1. Unix/Windows: Kde by m∞l b²t ulo╛en soubor php.ini?

V UNIXu mß b²t implicitn∞ v adresß°i /usr/local/lib. Mnoho lidφ to bude chtφt p°i kompilaci zm∞nit pomocφ parametru --with-config-file-path. Mohli byste ho, nap°φklad, nastavit zhruba takto:
--with-config-file-path=/etc
Pak byste zkopφrovali soubor php.ini-dist z distribuce do /etc/php.ini a upravili tak, jak chcete.

Pod Windows je soubor php.ini implicint∞ umφst∞n v adresß°i systΘmu Windows.

2. UNIX: Nainstaloval jsem PHP, ale v╛dy, kdy╛ naΦφtßm dokument, dostanu zprßvu 'Document Contains No Data'! O co jde?

Pravd∞pobn∞ to znamenß, ╛e PHP mß n∞jak² problΘm a padß. Podφvejte se do protokolu chyb, zda se jednß o tento p°φpad a pak zkuste problΘm reprodukovat mal²m testem. Pokud vφte, jak pou╛φvat 'gdb', velmi pom∙╛e, kdy╛ m∙╛ete s va╣φm hlß╣enφm chyby poskytnout v²pis (backtrace). V²vojß°i tak mohou snadn∞ji lokalizovat problΘm. Pou╛φvßte-li PHP jako modul do serveru Apache, zkuste n∞co jako:

  • Zastavte httpd procesy

  • gdb httpd

  • Zastavte httpd procesy

  • > run -X -f /path/to/httpd.conf

  • Potom naΦt∞te do prohlφ╛eΦe URL, kde se vyskytl problΘm

  • > run -X -f /path/to/httpd.conf

  • Dostanete-li core dump (PHP spadne), gdb by vßs o tom m∞l informovat

  • napi╣te: bt

  • Zφskan² v²pis (backtrace) byste m∞li p°ilo╛it k hlß╣enφ chyby. To by se m∞lo poslat na http://bugs.php.net/

Pokud vß╣ skript pou╛φvß funkce pro regulßrnφ v²razy (ereg() a dal╣φ), m∞li byste se ujistit, ╛e jste zkompilovali PHP a Apache se stejn²m balφΦkem pro regulßrnφ v²razy. S PHP a Apachem 1.3.x by se to m∞lo dφt automaticky.

3. UNIX: Instaloval jsem PHP z balφΦk∙ RPM, ale Apache nezpracovßvß strßnky s PHP! O co tu jde?

Za p°edpokladu, ╛e se obojφ, jak Apache, tak PHP, instalovalo z balφΦk∙ RPM, bude t°eba "odkomentovat" nebo p°idat do souboru http.conf n∞kterΘ z nßsledujφcφch °ßdk∙ (nebo v╣echny):
# 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     /* pro PHP 3 */
LoadModule php4_module        modules/libphp4.so     /* pro PHP 4 */
LoadModule perl_module        modules/libperl.so
P°idejte takΘ:
AddType application/x-httpd-php3 .php3    /* pro PHP 3 */
AddType application/x-httpd-php .php      /* pro PHP 4 */
... do globßlnφch vlastnostφ nebo do vlastnostφ virtußlnφ domΘny (VirtualDomain) by se m∞la p°idat podpora PHP.

4. UNIX: Instaloval jsem PHP 3 z balφΦk∙ RPM, ale nekompiluje se s podporou databßze, kterou pot°ebuji! O co tu jde?

Kv∙li tomu, jak se PHP 3 budovalo, nenφ snadnΘ sestavit kompletnφ flexibilnφ RPM balφΦek s PHP. ProblΘm je vy°e╣en v PHP 4. Pro PHP 3 nynφ doporuΦujeme pou╛φvat mechanismus popsan² v souboru INSTALL.REDHAT v distribuci PHP. Pokud trvßte na pou╛itφ RPM verze PHP 3, Φt∞te dßl...

RPM pakovaΦe jsou nastaveny na tvorbu RPM balφΦk∙ k instalaci bez podpory databßzφ kv∙li zjednodu╣enφ instalacφ a proto, ╛e RPM pou╛φvß adresß° /usr/ namφsto standardnφho /usr/local/. Musφt sd∞lit RPM souboru spec, kterΘ databßze podporovat a umφst∞nφ adresß°e nejvy╣╣φ ·rovn∞ databßzovΘho serveru.

Tento p°φklad vysv∞tluje proces p°idßnφ podpory populßrnφho databßzovΘho serveru MySQL, pro instalaci PHP jako modulu do Apache.

V╣echny tyto informace smaoz°ejm∞ mohou b²t upraveny pro libovoln² databßzov² server, kter² PHP podporuje. Pro tento p°φklad budeme p°edpoklßdat, ╛e jste instalovali MySQL a Apache pln∞ z balφΦk∙ RPM.

  • Nejd°φve odstra≥te mod_php3 :
    rpm -e mod_php3

  • Potom vezm∞te zdrojov² balφΦek RPM a spus╗te na n∞m, NE --rebuild
    rpm -Uvh mod_php3-3.0.5-2.src.rpm

  • Upravte soubor /usr/src/redhat/SPECS/mod_php3.spec

    V sekci %build p°idejte databßzovou podporu, kterou chcete, a nastavte cestu.

    Pro MySQL byste p°idali
    --with-mysql=/usr \
    Sekce %build bude vypadat p°ibli╛n∞ takto:
    ./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

  • PotΘ, co jsou provedeny tyto zm∞ny, zkompilujte balφΦek takto:
    rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

  • Potom balφΦek nainstalujte:
    rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

Ujist∞te se, ╛e jste restartovali Apache, a nynφ ji╛ mßte PHP 3 s podporou MySQL. Uv∞domte si, ╛e je pravd∞podobn∞ mnohem jednodu╣╣φ zkompilovat distribuΦnφ balφΦek tar a dr╛et se instrukcφ v souboru INSTALL.REDHAT z distribuce.

5. UNIX: P°idal jsem do Apache patch pro FrontPage Extension a PHP nßhle p°estalo pracovat. Je PHP nekompatibilnφ s FrontPage Extension pro Apache?

Ne, PHP pracuje dob°e i s FrontPage Extension. ProblΘm je v tom, ╛e FrontPage patch modifikuje n∞kterΘ struktury Apache, na kterΘ PHP spolΘhß. P°ekompilovßnφ PHP (pou╛itφm 'make clean ; make') po instalaci FP patche by m∞lo problΘm vy°e╣it.

6. UNIX/Windows: Nainstaloval jsem PHP, ale p°i pokusu naΦφst soubor PHP skriptu do prohlφ╛eΦe se zobrazφ pouze prßzdnß obrazovka.

V prohlφ╛eΦi vyberte funkci 'zobrazit zdrojov² k≤d', nejspφ╣ uvidφte zdrojov² k≤d va╣eho PHP skriptu. To znamenß, ╛e server neposφlß skript k interpretaci. Chyba je n∞kde v konfiguraci serveru - rad∞ji dvakrßt zkontrolujte konfiguraci podle instrukcφ k instalaci PHP.

7. UNIX/Windows: Nainstaloval jsem PHP a kdy╛ chci naΦφst PHP soubor do prohlφ╛eΦe, objevφ se "500 Internal Server Error".

P°i pokusu spustit PHP do╣lo k n∞jakΘ chyb∞. Abyste vid∞li detailn∞j╣φ chybovou zprßvu, z p°φkazovΘ °ßdky, p°ejd∞te do adresß°e se souborem PHP (pod Windows php.exe) a spus╗te php -i. Pokud p°i b∞hu PHP dojde k chyb∞, bude zobrazena odpovφdajφcφ chybovou zprßva, kterß vßm °ekne, co se mß dßl ud∞lat. Pokud zφskßte obrazovku plnou HTML k≤du (v²stup funkce phpinfo()), pak PHP funguje a vß╣ problΘm m∙╛e souviset s konfiguracφ serveru, kterou je pak t°eba dob°e zkontrolovat.

8. N∞kterΘ operaΦnφ systΘmy: Nainstaloval jsem PHP bez chyb, ale nynφ, kdy╛ zkusφm spustit Apache, ohlßsφ se chyby o nedefinovan²ch symbolech:
[mybox:user /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress

To aktußln∞ nemß nic spoleΦnΘho s PHP, ale s knihovnami klienta MySQL. N∞kterΘ pot°ebujφ --with-zlib, jinΘ nikoli. Tφmto se zab²vß takΘ MySQL FAQ.

9. Windows: Nainstaloval jsem PHP, ale p°i naΦtenφ strßnky do prohlφ╛eΦe se zobrazφ chyba:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:

Tato chybovß zprßva znamenß, ╛e z PHP nemohou vychßzet ╛ßdnß data. Abyste vid∞li detailn∞j╣φ chybovou zprßvu, z p°φkazovΘ °ßdky, p°ejd∞te do adresß°e se souborem PHP (pod Windows php.exe) a spus╗te php -i. Pokud p°i b∞hu PHP dojde k chyb∞, bude zobrazena odpovφdajφcφ chybovou zprßva, kterß vßm °ekne, co se mß dßl ud∞lat. Pokud zφskßte obrazovku plnou HTML k≤du (v²stup funkce phpinfo()), PHP funguje.

Jestli╛e PHP pracuje v p°φkazovΘ °ßdce, zkuste to znovu z prohlφ╛eΦe. Pokud to stßle nefunguje, m∙╛e to b²t jednφm z t∞chto d∙vod∙:

  • Nastavenφ p°φstupov²ch prßv k souboru se skriptem, k php.exe, php4ts.dll, php.ini nebo n∞jakΘmu roz╣φ°enφ PHP, kterΘ se pokou╣φte naΦφst, je takovΘ, ╛e k nim anonymnφ internetov² u╛ivatel ISUR_<machinename> nemß p°φstup.

  • Soubor se skriptem neexistuje (nebo p°φpadn∞ nenφ tam, kde si myslφte, ╛e je, relativn∞ ke ko°enovΘmu adresß°i webu). Uv∞domte si, ╛e na IIS m∙╛ete tuto chybu zachytit za╣krtnutφm volby 'check file exists' p°i nastavovßnφ skriptov²ch slu╛eb v Internet Services Manageru. Pokud skript neexistuje, server vrßtφ chybu 404. Dal╣φ v²hodou je to, ╛e IIS provede na souboru se skriptem v╣echny pot°ebnΘ autentikace zalo╛enΘ NTLanMan.

10. Windows: Dodr╛el jsem v╣echny instrukce, ale PHP a IIS stßle odmφtajφ spolupracovat!

Ujist∞te se, ╛e ka╛d² u╛ivatel, kter² pot°ebuje spou╣t∞t PHP skripty mß prßva pro spou╣t∞nφ php.exe! IIS pou╛φvß anonymnφho u╛ivatele, kter² se p°idß p°i instalaci IIS. Tento u╛ivatel pot°ebuje prßva k php.exe. TakΘ ka╛d² autentikovan² u╛ivatel bude pot°ebovat prßva na spou╣t∞nφ php.exe. A IIS4 musφte sd∞lit, ╛e PHP je skriptovacφ engine.