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"
;
}
|
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
.
Když
napíšu
následující
kód
,
výstup
se
tiskne
v
nesprávném
pořadí
:
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(
)
)
.
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
.
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
:
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
:
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
http
:
/
/support.microsoft.com
/
support
/
kb
/
articles
/
q160
/
4/22.asp
.
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
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
.
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
.
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"
]
"
)
.