V následujících odstavcích se pokusím zodpovědět na nejčastější dotazy a problémy, se kterými se setkávají především začínající uživatelé systému PHP. Vycházím přitom ze skutečných dotazů, se kterými jsem setkal během výuky PHP a v různých diskusních skupinách.
Tento problém jste si způsobili sami snahou o co nejvýkonnější server. Distribuce PHP4 pro Windows obsahuje dva předpřipravené konfigurační soubory php.ini – php.ini-dist a php.ini-optimized. Většina uživatelů slepě sáhne po druhém konfiguračním souboru. Ten však vypíná mnoho funkcí interpretu PHP, aby maximálně urychlil jeho běh. Vypnuté je v něm i načtení parametrů z formulářů do proměnných. Pro jeho zapnutí stačí v php.ini správně nastavit hodnotu direktivy register_globals:
register_globals = On
Nejpravděpodobnější je varianta, že někdy v minulosti jste si v prohlížeči uložili cookie se stejným názvem jaký má proměnná. Při předávání proměnných skriptům mají cookies standardně vyšší prioritu než proměnné z formulářů. Řešením je buď přejmenovat proměnné, nebo si nepotřebné cookies z prohlížeče vymazat.
Pokud vaše aplikace používá cookies, vyplatí se používat prohlížeč, který umožňuje snadné prohlížení a odstraňování cookies. Takovým prohlížečem je například Mozilla, která získala ocenění produkt roku. Zkuste v ní příkaz Tasks->Privacy and Security->Cookie Manager->View Stored Cookies.
1.3. Ve skriptu potřebuji použít funkci blabla(), ale PHP mi při jejím použití ohlásí:
Fatal error: Call to undefined function: blabla() in název skriptu on line řádka
Ve skriptu jste použili funkci, kterou vaše PHP nezná. Ze všeho nejdřív je dobré zkontrolovat, zda v názvu funkce není překlep. Pokud funkce stále nepracuje, jedná se o funkci, která je součástí nějakého modulu PHP – těchto modulů lze v PHP použít několik, umožňují například spolupráci s různými databázemi, vytváření obrázků apod. Je možné, že funkce patří do modulu, který nemáte v PHP načtený. Přehled modulů, které vaše PHP podporuje zjistíte velice jednoduše pomocí funkce phpinfo(), která vypíše kompletní informaci o konfiguraci interpretu PHP. V novějších verzích PHP je k dispozici speciální funkce, která vrací pole s názvy všech aktivních modulů:
print_r (get_loaded_extensions());
Pokud vaše funkce patří do modulu, který není načtený, musíte modul do PHP přidat. Nejjednodušší situace je asi ve Windows. Zde stačí do souboru php.ini přidat řádku
extension = php_název_modulu.dll
Dostupné moduly jsou přitom nejčastěji uloženy v adresáři extensions v adresáři s PHP. Některé moduly závisí na dalších DLL knihovnách v adresáři dlls, ty je potřeba nakopírovat do nějakého adresáře, kde je Windows najdou. Například c:\winnt\system32.
Na unixových systémech je několik možností, jak modul přidat, a podstatně závisí na tom, jak je PHP zkompilováno. Mnoho uživatelů používá nové distribuce Linuxu a má Apache i PHP nainstalováno z nějakých distribučních balíčků jako RPM. Mohou zde být připraveny i balíčky s dalšími PHP moduly. Většinou je stačí nainstalovat a pak v php.ini přidat další direktivu extension, podobně jako na Windows. Přípona modulu je obvykle .so místo .dll.
Pokud jste si PHP sami sestavili ze zdrojových kódů, musíte znovu provést kompilaci. Před ní je potřeba spustit příkaz ./configure s odpovídajícími parametry. Pro většinu modulů má patametr tvar --with-název_modulu. Kompilaci se zde bohužel nemůžeme věnovat nijak detailně, podrobnější informace naleznete v dokumentaci k PHP.
Možností je několik. V jednoduchých případech lze všechny proměnné předávat jako parametry v URL adresách odkazů a ve skrytých formulářových polích. Tento postup je však dost pracný, není moc bezpečný a zbytečně zvyšuje objem dat přenášených mezi klientem a serverem.
Existuje mechanismus tzv. session proměnných, jejichž hodnota se pro jednotlivé uživatele aplikace automaticky přenáší mezi stránkami. V PHP4 jsou session proměnné standardní součástí jazyka, v PHP3 můžete použít nějakou rozšiřující knihovnu, např. PHPLIB. Podrobnější informace naleznete na stránkách http://www.kosek.cz/clanky/php4/session.html a http://www.kosek.cz/clanky/phplib/session.html.
Existují i „free-weby“, které podporují PHP a někdy i databázi MySQL. Jejich použití je však vhodné pouze pro malé projekty – díky velkému zájmu uživatelů mají velmi často problémy s výkonem. Nejlépe, když je sami vyzkoušíte – http://www.kgb.cz, http://www.fbi.cz, http://www.miesto.sk, http://www.yo.cz, http://www.egarden.cz, http://www.oceany.cz, http://www.host.sk, http://www.crolink.cz a http://www.webzdarma.cz. Nic není samozřejmě úplně zadarmo. Na většině serverů musíte na své stránky umístit reklamní banner.
Dnes už je situace poměrně příznivá. O PHP vydalo původní českou knihu nakladatelství Grada, Computer Press v brzké době vydá překlad knihy od nakladatelství Wrox. Vzniká i český překlad originálního manuálu, který je dostupný na adrese http://www.php.net/manual/cs/. České servery zaměřené na vývojáře přinášejí samozřejmě i informace o PHP. Zkuste servery jako http://www.builder.cz, http://www.root.cz, http://www.interval.cz, http://www.php.sk nebo http://www.developer.sk.
Začal bych asi diskusní skupinou cz.comp.lang.php. Pokud nevíte, jak s diskusní skupinou pracovat, zkuste do prohlížeče napsat adresu news://csnews.vslib.cz/cz.comp.lang.php.
Existují i diskusní fóra přístupná přímo z prohlížeče. Mezi nejnavštěvovanější patrně patří klub PHP na Průvodci a diskusní fórum PHP na serveru Builder.cz.
Připravuje, ale nebude hotová dříve než během roku 2001 – je to zkrátka hodně práce a den má jen 24 hodin. PHP4 přidává oproti předchozí verzi několik nových rysů, ale z hlediska psaní skriptů nijak zásadních. Kniha je tedy stále aktuální, největší rozdíly mezi PHP3 a PHP4 jsou popsány na stránce http://www.kosek.cz/clanky/php4/. Podrobnější informace jsou v originální dokumentaci.
Lze k tomu použít program strfile, který je standardní součástí mnoha unixových distribucí. Máte-li Windows, stáhněte si zkompilovanou verzi. Program vyžaduje, abyste v systému měli nainstalovánu knihovnu cygwin1.dll.
Obsluha formuláře je popsána ve skriptu na straně 107. Pokud chcete data získaná ve formuláře odeslat na nějakou e-mailovou adresu, přidejte za řádek
// Zde se mohou získané informace libovolně zpracovat
následující kód:
if (@Mail("prijemce@nekde.cz", "Formular ze stranky", "Jmeno: $Jmeno\n" . "Prijmeni: $Prijmeni\n" . "Pohlavi: $Pohlavi\n" . "E-mail: $Email\n" . "WWW: $Web\n\n" . "Datum a cas odeslani formulare: " . Date("d.m.Y H:i:s"))) echo "<p>Formulář byl úspěšně odeslán.</p>\n"; else echo "<p>Při odesílání formuláře došlo k chybě.</p>\n";
Prostudujte všechnu dokumentaci pečlivě ještě jednou a hlavně NEPROPADEJTE PANICE.