Forum und email
Instalace

Kapitola 53. 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 https://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.