Manuál PHP | ||
---|---|---|
Předcházející | Další |
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.
[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress |
cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are: |
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 |
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.
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 |
AddType application/x-httpd-php3 .php3 /* pro PHP 3 */ AddType application/x-httpd-php .php /* pro PHP 4 */ |
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 \ |
./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 |
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.
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.
Předcházející | Domů | Další |
Záležitosti databází | Nahoru | Sestavovací (kompilační) problémy |