zakázaná funkce ini_set() na hostingu
- romansklenar
- Člen | 655
Zdravím, zajímalo by mě, zda-li fungují aplikace na nette na hostinzích
se zakázanou funkcí ini_set(). Jelikož mám tu smůlu a hostuju na takovém,
nezbylo mi nic jiného, než zakomentovat všechny výskyty volání funkce
(tuším že jich bylo cca 20 v 6 souborech) a vyhazování výjimek
v kódu.
Funguje to, ale netuším, jestli by se to na nějaké složitější aplikaci
(než jsou v adresáři examples) nerosypalo nebo nedělalo neplechu.
Nemáte s tím někdo zkušenost, případně tip jak to obejít?
- PetrP
- Člen | 587
Mam stejně ‚postižený‘ hosting. Zakomentovat ini_set jsem musel například v debug, kde se inisetem zapínalo některé další vypisování chyb a upravovalo se také barevné formátovaní zobrazovaného php výstupu. Dále v debugu nefunguje logování chyb do souboru. S tím se ale dá žít.
Pak jsem také musel komentovat v přihlašovacích sessionech (tuším Web/Session.php) kde se tím například zakazuje dávaní sessionId do url při vypnutých cookies, což může být potencionální riziko.
Ty nastavení session by se asi vyplatilo zkontrolovat jak je má nastavene hosting, a rozdíly požádat změnit podporou. Ale asi jen u webu kde by hodně vadilo že někdo šikovnej podvrhne přihlašování.
Možná se iniset používá i jinde ale tam jsem se zatím ze zkoumáním nette nedostal. Vám díky tomu něco konkrétního nefunguje?
- romansklenar
- Člen | 655
Ne to ne, Nette s tíhle defektem zatím funguje, ale nestavěl jsem na něm
zatím nic složitého. Spíše se mi jedná o tuto část kódu
v Configurator.php
// process ini settings
if ($config->set instanceof Config) {
if (!function_exists('ini_set')) {
throw new NotSupportedException('Function ini_set() is not enabled.');
}
foreach ($config->set as $key => $value) {
ini_set($key, $value);
}
}
kde se v cyklu prochází nějaká nastavení (nezkoumal jsem to zatím
blíže jaká), nejspíše z config.ini
aplikace, kde by mohlo být
něco podstatného, díky čemuž by později padala aplikace, jak se říká,
na hubu.
- romansklenar
- Člen | 655
Tak to jsou naše předpoklady shodné :-)
Chtělo by to asi ukázku nějakého obsáhlejšího config.ini
,
aby šlo vidět co vše se dá vůbec přes tento soubor nastavit, pak by se
dalo určit, jestli nejsou nějaké vlastnosti, které by se měly nastavovat
klíčová.
Například při práci se session, zlib nebo třeba platnost cookies (jejichž
nastavování jsou v tomhle stavu zakomentované)
Editoval romansklenar (21. 7. 2008 2:40)
- David Grudl
- Nette Core | 8229
Na to existuje jen jedna dobrá rada – změnte hostéra. Na trhu je tak velká konkurence, že skutečně nemá smysl na někom lpět.
Momentálně se ini_set v případě Debug volá pouze podmíněně (na
obarvování kódu jsem zapomněl), v případě Environment/Configurator
jen tehdy, pokud je přes config.ini vyžádáno, takže asi jediný
„neošetřený“ případ jsou Sessions. Zde by se dalo použít
Tools::iniSet()
, což je šetrnější alternativa. Podstatné
však je, že bez ini_set máte svázané ruce a dřív nebo později narazíte
na případ, který prostě nevyřešíte.
- romansklenar
- Člen | 655
David Grudl napsal(a):
Momentálně se ini_set v případě Debug volá pouze podmíněně, v případě Environment/Configurator jen tehdy, pokud je přes config.ini vyžádáno…
Nejsou s tím problémy, v Debug a Configurator akorát vyhodí výjimku
NotSupportedException('Function ini_set() is not enabled.');
jinak
to zatím na postiženém hostingu neblbne.
EDIT:
někdy lze volání ini_set
vhodně programátorsky obejít:
set_include_path($value); // ini_set('include_path', $value);
date_default_timezone_set($value); // ini_set('date.timezone', $value);
set_time_limit($value); // ini_set('max_execution_time', $value);
session_set_cookie_params($value); // ini_set('session.cookie_lifetime', $value);
jindy zase použít funkci ini_alter
(když už je ale
zakázaná ini_set
, na 95% bude zakázaná i
ini_alter
)
Editoval romansklenar (24. 7. 2008 15:29)