FileStorage::lock() versus Debugger::$scream = true;

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

Ahoj,
snažím se do našeho projektu přidat Latte šablony a narazil jsem na následující problém. Pokud Laděnce nastavím

<?php
    Debugger::$strictMode = true;
    Debugger::$scream = true;
?>

a zároveň použiju PhpFileStorage pro kešování šablon, tak dojde k ukončení aplikace s chybou: failed to open stream: No such file or directory v metodě lock() třídy FileStorage na řádku

<?php
   $handle = @fopen($cacheFile, 'r+b'); // @ - file may not exist
?>

To je sice logický chování, ale já bych chtěl mít co nejstriktnější nastavení php a zároveň mít šablony kešovaný.

Lze tohle chování nějak obejít nebo jsem něco špatně nastavil?

Jan Tvrdík
Nette guru | 2595
+
0
-

Debugger::$scream se při normálním vývoji nepoužívá. Slouží pro velmi specifické případy.

filda
Člen | 8
+
0
-

Jan Tvrdík napsal(a):

Debugger::$scream se při normálním vývoji nepoužívá. Slouží pro velmi specifické případy.

Jaký specifický připady?
Já měl vždycky pocit, že by se ta konstrukce neměla používat jednak kvůli nestandardnímu chování, jednak kvůli výkonovým dopadům a hlavně proto, že potlačovat výpis chyb, zvlášť při vývoji, je prostě špatně.

Aurielle
Člen | 1281
+
0
-

Když si tu konstrukci ošetříš na návratové hodnoty a podchytíš všechny možné stavy, tak bych v tom neviděl problém. A Nette ti při vývoji žádné chyby nepotlačí, pokud samozřejmě před nějakou konstrukci ten zavináč nenapíšeš. A kdyby ano, tak předpokládám, že víš, co děláš.

Filip Procházka
Moderator | 4668
+
0
-

Samozřejmě je špatně, když ve svém kódu potlačuješ chyby. Nette ovšem ví proč to dělá, spíše se snaž pochopit, proč to dělá. Většinou proto, že PHP je v určitých ohledech dost stupidní a řeší tím některé nedostatky. Ty je už potom řešit nemusíš.

Ty ale scream v podstatě nepotřebuješ. Až ho budeš potřebovat, tak to budeš vědět, věř mi.

filda
Člen | 8
+
0
-

HosipLan napsal(a):

Samozřejmě je špatně, když ve svém kódu potlačuješ chyby. Nette ovšem ví proč to dělá, spíše se snaž pochopit, proč to dělá. Většinou proto, že PHP je v určitých ohledech dost stupidní a řeší tím některé nedostatky. Ty je už potom řešit nemusíš.

Ty ale scream v podstatě nepotřebuješ. Až ho budeš potřebovat, tak to budeš vědět, věř mi.

Předpokládám, že to Nette dělá, protože je to rychlejší než se nejdřív na ten soubor zeptat pomocí file_exists(), jinej důvod mě nenapadá.

Do dneška jsem totiž scream používal jako nástroj k odhalování „nepěkně“ napsanejch částí naší aplikace a myslel jsem si, že vím proč ho používám. Podle toho co říkáte jsem se pletl.

Jaký jsou teda skutečný důvody k použití scream?

paranoiq
Člen | 392
+
0
-

mezitím než se zeptáš file_exists() a posléze zavoláš fopen(), může uplynout spousta vody

Filip Procházka
Moderator | 4668
+
0
-

filda napsal(a):

Do dneška jsem totiž scream používal jako nástroj k odhalování „nepěkně“ napsanejch částí naší aplikace a myslel jsem si, že vím proč ho používám. Podle toho co říkáte jsem se pletl.

Jaký jsou teda skutečný důvody k použití scream?

Až to zjistím, dám ti vědět :) Ještě jsem ho totiž nepotřeboval ;)