Autor Zpráva
marsme
Profil
V několika php kodéch jsem si všimnul že programátoři používají funkci mkdir s @ před tzn @mkdir. Jaký je rozdíl při tomto použití?
fandaa
Profil
marsme:
Žádný. @ pouze potlačí chybový výstup.
marsme
Profil
fandaa:

díky. Proč tedy má smysl @používat. Není to naopak špatně že potlačují chybové výstupy?
juriad
Profil
marsme:
Je to špatně, ale občas není vyhnutí.
Já osobně silně doporučuji ke každému potlačení chybové hlášky povinně psát komentář s vysvětlením, proč se hláška potlačuje.
fandaa
Profil
marsme:
Samozřejmě je dobré ho nepoužívat, tj. chybu odchytit a zpracovat. Pokud děláš na vývojové verzi, chybu odchytíš a zpracuješ, aby skript nevykazoval tuto chybu. Pokud je skript nasazen do produkce, je obvyklé, že je chybový výstup vypnut (avšak stále je logován), čili většinou není žádný důvod tento operátor používat.

Vypnout výpis chyb v produkci je důležité, neboť se lehce může změnit prostředí (jiný systém, verze, ...) a skript by pak vypisoval tyto chyby. Pokud toto přepínání není potřeba / vyřešeno, tj. jedná se o nějaký menší web, kde se to prostě může stát a není to tak kritické, je jednodušší pro programátora prostě použít @.
Jan Tvrdík
Profil
marsme:
Doplním, že @mkdir představuje v podstatě jediný způsob, jak v PHP korektně atomicky vytvořit složku. Takže naopak čím je web větší, tím víc je potřeba tuto konstrukci používat.
fandaa
Profil
Jan Tvrdík:
Mohl bych si o tom někde počíst více? Nebo je to myšleno tak, že je to jediný způsob, jak potlačit tuto chybu při výpisu do logu (tj. aby na větších webech zbytečně nerostl log)?
Jan Tvrdík
Profil
fandaa:
Dejme to mu, že máš web, kam si uživatelé mohou nahrávat fotky. Fotky každého uživatele nahráváš do jeho složky, tedy tvoje fotky budou ve složce fandaa. Tuto složku vytváříš automaticky při nahrání první fotky v případě, že neexistuje. Kód vypadá asi takto:

$path = 'photos/' . $username;
if (!is_dir($path)) mkdir($path);

Problém tohoto řešení spočívá v tom, že mezi kontrolou zda složka existuje a jejím vytvoření pomocí funkce mkdir mohl tu složku vytvořit někdo jiný (stačí aby uživatel nahrával svoji první fotku ve více záložkách zároveň). V takovém případě volání mkdir skončí chybou, že se pokoušíš vytvořit již existující složku. Problém je, že toto není chyba, kterou by mělo cenu logovat, protože jí nelze nijak opravit. Řešením je tedy umlčení té chyby pomocí zavináče.
fandaa
Profil
Jan Tvrdík:
V tomto případě užití @ chápu. Díky za modelovou situaci.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: