Kapitola 50. Používání PHP

Tato část shrnuje nejčastější chyby , se kterými se můžete setkat při psaní PHP skriptů .

1. Chtěl bych napsat generický PHP skript, který by uměl zpracovat data z jakéhokoli formuláře. Jak se dozvím, které proměnné metody POST jsou k dispozici?
2. Potřebuji převést všechny apostrofy (') na zpětná lomítka následovaná apostrofy. Jak se to dá udělat pomocí regulárního výrazu?
3. Když napíšu následující kód, výstup se tiskne v nesprávném pořadí:



what's going on?
4. Hej, co se stalo s mými konci řádků?
 
pre

 
?php

 
echo

 
"

 
Tohle

 
by

 
měl

 
být

 
první

 
řádek

 
."

 
;

 
?

 
?php

 
echo

 
"Tohle

 
by

 
se

 
mělo

 
ukázat

 
na

 
novém

 
řádku

 
."

 
;

 
?

 
/

 
pre



5. Zobrazila se mi zpráva 'Warning: Cannot send session cookie - headers already sent...' nebo 'Cannot add header information - headers already sent...'.
6. Potřebuji přímo přistupovat k hlavičce požadavku. Jak to udělat?
7. Když zkusím autentikaci s IIS, dostanu 'No Input file specified'.
8. Můj PHP skript pracuje na IE a Lynxu, ale v Netscapu část výstupu mizí. Když si zapnu "Zobrazit zdrojový kód", v IE vidím obsah, v Netscapu nikoliv.
9. Jaké jsou předpoklady míchání XML a PHP? Stěžuje si to na moje ?xml tagy!
10. Jak mohu použít PHP s FrontPagem nebo jiným HTML editorem, který trvá na odsunutí mého kódu?
11. Kde najdi úplný seznam dostupných přednastavených proměnných, a proč to není zdokumentováno v dokumentaci PHP?
12. Zkouším přistupovat k jedné ze standardních CGI proměnných (jako je $DOCUMENT_ROOT nebo $HTTP_REFERER) v uživatelsky definované funkci, a nemůže ji to najít. Co je špatně?

Ujistěte se , že máte v souboru php.ini zapnuto track_vars Od PHP 4.0.3 je tato možnost vždy zapnuta . Pokud tomu tak je , vytvoří se nějaká asociativní pole , z nichž nejdůležitější je $HTTP_POST_VARS . Takže pro psaní generického skriptu pro obsluhu proměnných metody POST budete potřebovat přibližně toto :

 
foreach

 
(

 
$HTTP_POST_VARS

 
as

 
$var

 
=

 
$value

 
)

 
{

 
echo

 
"$var

 
=

 
$value

 
br

 
\n"

 
;

 
}





Funkce header( ) , set_cookie( ) a funkce session musí do výstupu přidat hlavičky . Hlavičky je možno posílat pouze před vlastním obsahem . Funkce to udělají , pokud PHP běží jako modul Apache . Následující kus kódu zobrazí všechny hlavičky v požadavku :






Potřebuji přímo přistupovat k hlavičce požadavku . Jak to udělat ?

Funkce getallheaders( ) to udělá , pokud PHP běží jako modul do Apache . Následující kus kódu zobrazí všechny hlavičky v požadavku :






Netscape je striktnější ohledně HTML tagů ( např . tabulek ) něž IE . Kontrola HTML výstupu pomocí HTML validátoru , jako je validator.w3.org , může být nápomocna . Například chybějící / table způsobuje výše uvedený problém .

IE i Lynx také ignorují jakékoliv nulové ( \0 ) znaky v HTML proudu , Netscape nikoli . Nejlepší cestou k ověření je zkompilovat verzi PHP pro příkazovou řádku ( známou jako CGI verze ) a spustit skript z příkazové řádky . Na *NIXech to přesměrujte do od -c a hledejte znaky \0 . Pod Windows musíte najít editor nebo jiný program , který umožňuje prohlížení binárních souborů . Když Netscape uvidí v souboru nulový znak , typicky nic dalšího nezobrazí , ačkoli IE i Lynx ano .

Jaké jsou předpoklady míchání XML a PHP ? Stěžuje si to na moje ?xml tagy !

Musíte vypnout krátké tagy v souboru php.ini nastavením short_tags na 0 nebo použitím odpovídající direktivy Apache . Můžete také použít sekci File k selektivnímu nastavení .

Jak mohu použít PHP s FrontPagem nebo jiným HTML editorem , který trvá na odsunutí mého kódu ?

Jedním z nejjednodušších způsobů je povolit použití ASP tagů v PHP kódu . To umožní používat oddělovače v ASP stylu ( % a % ) . Některé populární HTML editory s pracují ( v tuto chvíli ) inteligentněji . K zapnutí ASP tagů musíte v souboru php.ini nastavit proměnnou asp_tags nebo použít příslušnou direktivu Apache .