zakázaná funkce ini_set() na hostingu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
romansklenar
Člen | 655
+
0
-

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
+
0
-

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
+
0
-

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.

PetrP
Člen | 587
+
0
-

Jestli to dobře chápu tak v .ini souborech se dá použít set> pro nastavování phpini. Takže to padne na hubu až budete chtít něco takhle nastavit. Taky si s nette zatím jenom hraju ale předpokládám že se bez toho obejdu.

romansklenar
Člen | 655
+
0
-

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 | 8139
+
0
-

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.

PetrP
Člen | 587
+
0
-

Přejít k jinému hostingu je nejlepší. Nicméně snad každý slušný hostér změní iniset na vyžádání. Proč ho vlastně s ‚bezpečnostních důvodů‘ zakazují? Nebylo by příjemnější jen vypnout nastavování problémových hodnot (pokud nějaký jsou).

romansklenar
Člen | 655
+
0
-

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)