Interpretovat nastavení konfiguračních direktiv
nemusí být vůbec snadné. V případě logických hodnot sice dokumentace tvrdí, že se vždy vrací
1
, 0
nebo prázdný řetězec, ale není tomu tak
v případě, že hodnotu nastavíme souborem .htaccess či httpd.conf a
direktivou php_value:
php_value magic_quotes_gpc On
V takovém případě ini_get vrátí přímo řetězec On
.
Konfiguraci je proto lepší zjišťovat účelovou funkcí, jako je třeba
get_magic_guotes_gpc()
. V případě, že žádná funkce
k dispozici není, můžete použít tuto:
/**
* Gets the boolean value of a configuration option
* @param string configuration option name
* @return bool
*/
function getDirective($directive)
{
$val = strtolower(ini_get($directive));
return $val === 'on' || $val === 'true'
|| $val === 'yes' || $val % 256;
}
if (getDirective('zend.ze1_compatibility_mode')) {
// zend.ze1_compatibility_mode is ON
}
Komentáře
Jakub Vrána #1
Příznaky v .htaccess by se měly nastavovat direktivou php_flag. David to jistě ví a poukazuje na to, že se to často dělá i direktivou php_value, s kterou je třeba řešit uvedený problém. Takže pro toho, kdo to neví…
Jan Tichý #2
U toho reguláru v druhém případě se v některých případech může hodit testovat to obráceně – tedy taxativně vyjmenované off,false,no,0 – a vše ostatní je pravda. Ale záleží na konkrétní direktivě, občas se může hodit spoléhat se na defaultní pravdu, jindy naopak.
David Grudl #3
ad obrácené testování: to by mě celkem zajímalo. Chování direktiv se mi totiž jeví tak, že nezávisle na jejím výchozím nastavení se po zkonfigurování nastaví na Off, a jen pokud výraz odpovídá uvedenému regulárnímu výrazu, nastaví se na On.
David Grudl #4
Aktualizace: testovací výraz jsem upravil, aby respektoval:
Jakub Vrána #5
#3 Davide Grudle, Skutečně se bere výčet pravdivých hodnot, viz zend_ini.c.
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.