Konfigurace PHP

Školení, která pořádám

Mám to štěstí, že u všech svých projektů si můžu nadiktovat konfiguraci PHP téměř dle libosti. Obvykle používám toto nastavení:

register_globals=Off
Kód je přehlednější, je to také část obrany před problémy vzniklými neinicializací proměnných.
magic_quotes_gpc=On Off
Jedna z možností obrany před SQL Injection.
magic_quotes_runtime=Off
Soubory načítané z disku nebo z jiných zdrojů se málokdy ukládají do databáze, proto je jejich automatické escapování na škodu.
magic_quotes_sybase=Off
Databázi Sybase nepoužívám, takže stojím i o escapování zpětného lomítka.
short_open_tag=Off
Člověk bez povědomí o PHP ale se znalostí XML lépe pochopí, k čemu se kód vztahuje, za určitých okolností může být soubor s PHP kódem díky respektování této direktivy validním XML dokumentem.
mysql.trace_mode=On
Umožňuje snadno odhalovat chyby v SQL dotazech.
default_charset=windows-1250 utf-8
Klientům je více než vhodné posílat informaci o tom, v jakém kódování dokument je.
error_reporting=7 6135
Je dobré být informován o všech chybách, ale nemám rád kontraproduktivní E_NOTICE.
variables_order=ESCPG
Když už použiji proměnnou $_REQUEST, je dobré vědět, v jakém pořadí tam proměnné budou, tato direktiva také určuje, které superglobální proměnné budou k dispozici.
allow_url_fopen=On
Práce se vzdálenými soubory pomocí běžných funkcí je velmi pohodlná.

Na produkčních serverech potom ještě display_errors=Off a vhodný error_log. Na serverech Apache se všechno tohle nastavení dá ovlivnit v souboru .htaccess.

Nastavení těchto direktiv zjednodušuje kód, obzvláště u direktiv magic_quotes_gpc a magic_quotes_runtime. Pokud jejich nastavení nelze ovlivnit a pokud si nemohu být jist jejich hodnotou (což platí např. u projektů určených k širokému nasazení), je potřeba všechny vnější proměnné a načtená data ošetřit v závislosti na jejich nastavení zjištěném např. funkcí ini_get.

Jakub Vrána, Dobře míněné rady, 7.3.2005, diskuse: 11 (nové: 0)

Diskuse

lammer:

konecne poriadny blog co sa nezaobera kravinami ale ma co to do seba
len tak dalej uz si medzi mojimi oblubenymi programovacimi strankami ;)

jiriczech:

Jenom jednu malou otazecku: proc win-1250?

ikona Jakub Vrána OpenID:

Už to mám sepsané v samostatném příspěvku. Shrnutí: pokud můžete, používejte UTF-8, pokud ne, je to celkem jedno.

ikona llook:

magic_quotes_gpc=On ???
Já osobně si radši všechno vyslashuju, až když to potřebuju. Díky ADODB mám navíc vyřešený rozdíly mezi databázemi.

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL: Reakce na: llook

ikona dgx:

>> Nastavení těchto direktiv zjednodušuje kód, obzvláště u direktiv magic_quotes_gpc a magic_quotes_runtime ...

Ve "zjednodušeném" kódu se obvykle lépe dělají a hůř hledají chyby :-)

Ale jak správně píšeš, na nastavení některých direktiv se nelze vždy spoléhat a je třeba je ošetřit. Tím  se však ztrácí jejich výhoda. Tedy vlastně jejich neexistence by byla v konečném důsledku přinosem.

Llaik:

Hezky vypis, ale nebylo by vhodnejsi (alespon podle meho nazoru na cilovou skupinu, ktery vznikl na zaklade minulych prispevku) kazdou tu polozku vysvetlit?

"Problem PHP" je ten, ze v nem spousta lidi jen papousku - pise co kde videli ci slyseli, aniz by tusili, co vlastne dela. Proto radeji vysvetlovat a ucit, nez davat pouhe vypisy.

ikona Jakub Vrána OpenID:

Správná připomínka, v příspěvku by to opravdu mělo být vysvětleno, protože dokumentace to nemusí objasnit dostatečně. Doplnil jsem to přímo do textu.

Krispin:

zdravim, priklanim se k Llaikovi, takhle je ten clanek opravdu muzu brat pouze jako neci nazor (z popisu o Vas usuzuji ze nazor zkuseneho, coz ovsem nemusi byt vzdy 100% spravny nazor a hlavne ne pouzitelny pro vsechny a pro vsechny pripady), na coz muzu mit jiny nazor, myslim, ze by bylo vhodny nejen popsat co jaka polozka v nastaveni dela, ale take obhajit (coz si myslim posledni odstavec dostatecne nedela) proc ji mate zapnutou / vypnutou...abych mohl pripadne prehodnotit svuj nazor na onu polozku..:)

MartinM:

Myslím si, že je ještě vhodné do toho seznamu přidat session.auto_start=0, protože jinak není možné do session ukládat objekty.

XnetmanX:

Zdravím všechny!
Tenhle web je super, jeden z mála kde jsem se něco o PHPčku dozvěděl. Ale potřeboval bych pomoct s jednou věcí. Na jedný škole dostali za úkol udělat funkční binární hodiny (viz. http://wosmoa.xf.cz/binclock/binclock.php ). Mělo by se to dělat v PHPčku ale ty moje základy na to nějak nestačí a je to celkem zajímavej úkol, takže bych se s tim rád popral. Najde se někdo kdo by alespoň poradil? Předem díky moc

thomasdv:

Pozdrav tě, náhodou z tý školy přímo sem, takže jestli potřebuješ trochu pomoct, tak se mi ozvi na ICQ 242-970-411 a nějak to pořešíme ;)
avatar © 2005-2019 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.