|
|
Kapitola 52. 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�:
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
|
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�?
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?
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";
}
|
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?
Nejd��ve se pod�vejte na funkci addslashes().
D�l� p�esn� to, co pot�ebujete. M�li byste se tak� pod�vat na
direktivu magic_quotes_gpc
v souboru php.ini.
3.
Kdy� nap�u n�sleduj�c� k�d, v�stup se tiskne v nespr�vn�m po�ad�:
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
|
what's going on?
Pro pou�it� v�sledk� va�� funkce ve v�razu (jako je spojen� s jin�m
�et�zcem v p��kladu v��e), mus�te hodnotu vracet
(pomoc� vracet), ne tisknout()
(pomoc� echo()).
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>
|
V PHP se blok k�du zakon�uje bu� "?>", nebo "?>\n" (kde \n
znamen� nov� ��dek). Tak�e ve v��e uveden�m p��kladu budou vypsan�
v�ty na jedin�m ��dku, proto�e PHP vynech�v� konce ��dk� za koncem
bloku. To znamen�, �e mus�te p�id�vat zvl�tn� konce ��dk� za ka�d�
blok PHP k�du, aby se vytisklo od��dkov�n� jedin�.
Pro� to PHP d�l�? P�i form�tov�n� norm�ln�ho HTML to obvykle
zjednodu�uje �ivot, proto�e nechcete konce ��dk�, n�br� chcete
vytvo�it extr�mn� dlouh� ��dky nebo jinak zne�itelnit zdrojov� k�d.
5.
Zobrazila se mi zpr�va 'Warning: Cannot send session cookie - headers already
sent...' nebo 'Cannot add header information - headers already sent...'.
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:
$headers = getallheaders();
foreach ($headers as $name => $content) {
echo "headers[$name] = $content<br>\n";
}
|
6.
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:
$headers = getallheaders();
foreach ($headers as $name => $content) {
echo "headers[$name] = $content<br>\n";
}
|
7.
Kdy� zkus�m autentikaci s IIS, dostanu 'No Input file specified'.
Bezpe�nostn� model IIS je s t�m na �t�ru. Je to probl�m spole�n� v�em
CGI program�m b��c�m pod IIS. �e�en�m je vytvo�it oby�ejn� HTML
soubor (neparsovan� PHP) jako vstupn� str�nku do autentikovan�ho
adres��e. Potom se pou�ije META tag k p�esm�rov�n� na PHP str�nku nebo
odkaz k ru�n�mu p�echodu. PHP pak autentikaci zpracuje spr�vn�. S
modulem ISAPI toto nen� probl�mem. Jin�ch NT webovsk�ch server�
se probl�m net�k�. V�ce informac� - viz
.
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.
Netscape je striktn�j�� ohledn� HTML tag� (nap�. tabulek) n� IE.
Kontrola HTML v�stupu pomoc� HTML valid�toru, jako je
, 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.
9.
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�.
10.
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.
11.
Kde najdi �pln� seznam dostupn�ch p�ednastaven�ch prom�nn�ch, a pro�
to nen� zdokumentov�no v dokumentaci PHP?
Nejlep�� metodou je vlo�it do str�nky
<?php phpinfo(); ?> a na��st to do prohl�e�e.
Zobraz� se informace v�eho druhu o nainstalovan�m PHP, v�etn� seznamu
prom�nn�ch prost�ed� i speci�ln�ch prom�nn�ch nastavovan�ch HTTP
serverem. Tento seznam opravdu nem��e b�t zdokumentov�n v dokumentaci
k PHP, prot�e se li�� server od serveru.
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�?
Prom�nn� prost�ed� jsou norm�ln� glob�ln� prom�nn�, tak�e je mus�te
bu� deklarovat ve funkci jako glob�ln� prom�nn� (nap��klad pou�it�m
"global $DOCUMENT_ROOT;") nebo pou��t pole glob�ln�ch
prom�nn�ch (nap�. "$GLOBALS["DOCUMENT_ROOT"]").
There are no user contributed notes for this page.
| |