Nejdůležitější konfigurační direktivy PHP
Dneska se mě ve škole na semináři tázal jeden student, jakou bych doporučoval optimální konfiguraci PHP. Na to samozřejmě neexistuje žádná jednoznačná správná odpověď. Hodně parametrů je závislých na konkrétní aplikaci. Co je někde klíčovou výhodou, může jinde škodit. U některých direktiv se ale myslím dá říci, které jejich nastavení je nejvhodnější.
Vhodnost či nevhodnost různých nastavení posuzuji zejména s ohledem na bezpečnost, přenositelnost aplikace mezi servery a budoucí vývoj PHP. Osobně vždy preferuji striktnější nastavení. Člověka to pak nutí psát čistě a s respektem k většině potenciálních problémů s přenositelností aplikace.
Můj původní záměr sepsat zde krátký stručně okomentovaný souhrn základních direktiv se ukázal být nereálným. Nakonec to vypadá tak na šest dílů. Pro dnešek tedy první várka, pojďme na to.
short_open_tag, asp_tags
Jakékoliv jiné otevření skriptu mimo preferované <?php
omezuje přenositelnost aplikace. Při vývoji proto mějte obě
direktivy zakázané. Nedovolí vám to pak používat žádné věci
typu <?
nebo <?=
nebo dokonce
<%
. I na ostrém serveru považuji za lepší mít
z obdobného důvodu obě direktivy vypnuté.
Nicméně v zájmu přenositelnosti je vhodné aplikaci jednou za čas
otestovat i se zapnutým short_open_tag
pro případ jejího
provozu na obdobně konfigurovaném serveru, vychytáte tak například různé
potenciální kolize s XML deklaracemi. Typický případ, který dělá
problém, je skript začínající nějak takto:
<?xml version="1.0" encoding="utf-8"?>
PHP parser pak hází chybu, protože se při zapnutém
short_open_tag
snaží interpretovat vnitřek XML deklarace.
Jedním z nejelegantnějších řešení je použít následující malý trik
s prázdným PHP blokem:
<<?php ?>?xml version="1.0" encoding="utf-8"?>
date.timezone
Dlouho chybějící direktiva zavedená až v PHP 5.1.0, leč i poté
stále často opomíjená. Nastavuje časové pásmo pro všechny date/time
funkce. Její nastavení je důležité proto, aby vám
všechny tyto funkce vracely správné hodnoty. Pokud ji nenastavíte, tak
zmiňované funkce budou zarputile vyhazovat E_NOTICE
či
E_STRICT
. Typické nastavení pro naši českou kotlinu je
'Europe/Prague'
.
Místo definice v php.ini můžete přímo ve svém kódu na začátku
aplikace použít funkci date_default_timezone_set()
.
Rozhodnutí, kde časové pásmo nastavovat, závisí na charakteru konkrétní
aplikace. V různých případech se může hodit to či ono či dokonce
kombinace obého.
optimální konfigurace je podle mě výchozí konfigurace PHP 5.2 a date.tiemzone je potřeba samozřejmě nastavit. Ale kvůli čemu bych brutálně vraždil php vývojáře je safe_mode = on
[1] Pokud jsem to, Techi, správně pochopil, tak Tebe by za vypnutý safe_mode brutálně vraždili administrátoři, kteří mají na starosti zabezpečení serveru :) V Safe Mode je sice třeba pár věcí obejít složitější cestou, ale myslím, že se to rozhodně vyplatí.
[2] zapnutý Safe_mode nadělá podstatně více problémů, než když je vypnutý a je správně nastaven open_base_dir. To je direktiva, která imho brzo nahradí safe_mode. Safe_mode je bastl o kterém ani samotní vývojáři php přesně nevědí jak se v různých situacích zachová. Menší zlo je safe_mode_gid, ale i tak to stojí za prd
BTW máte tu asi nejaké rozbité Texy! : )
Dobře zabezpečit server lze i se safe_mode = off. Jak zmínil LesTR, stačí, když admin není úplný blb. To že se ta direktiva dostala do PHP byl obrovský omyl. Taky by měl být tento omyl v PHP 6 odstraněn
Takle by to šlo taky:
print „„;
Pouzivam to tak isto len s apostrofmi :D
echo print ';