Portál AbcLinuxu, 8. května 2025 22:42
Řešení dotazu:
flock()
, znamená to, že jdu špatnou cestou.
Pokud potřebuji jen append
, nic zamykat nemusím, pouze výstup udělám ve formě jediného řetězce < 8 KiB.
Přepisování uvnitř souborů nebo delší řetězce s radostí přenechávám databázím. Umí to lépe než já a hlavně přitom nespadnou do deadlocku. A také vím, že ten záznam tam buď bude nebo nebude, ale data se mi po neúplném zápisu nerozbijí. Je to pohodlnější, rychlejší a spolehlivější řešení.
echo $datum,$ip,$text;je interpretován jako 3 příkazy. Jiné echo se do toho vloudit může. Nějak si nedovedu představit situaci, při které bych potřeboval zapsat blok dat > 8 KiB a nebyla by výhodnější databáze, která se o potřebné zámky postará sama.
If handle was fopen()ed in append mode, fwrite()s are atomic (unless the size of string exceeds the filesystem's block size, on some platforms, and as long as the file is on a local filesystem).Než se spolehneš na atomicitu zápisu, musíš se přesvědčit, že souborový systém má bloky větší než je potřeba zapsat dat a že ten souborový systém je lokální. Nikde není ani slovo o 8KB, i když to nejspíš bude hodnota, kterou obvykle vrátí fstat(). Navíc jsi se ani nezmínil o tom, že se musí jednat o lokální soubor. Tvé tvrzení je tedy nepravdivé, byť za určitých podmínek to může fungovat.
Celkem běžně vídám v logu překřížené výpisy.Používaj funkciu error_log() s parametrom $message_type=3. Za 10 rokov som ešte skrížené záznamy v logu nevidel. Samozrejme, celý záznam musíš zapísať na jedno volanie. Ak skladáš záznam z viacerých častí, najprv si ich pospájaj do jedného stringu a až potom volaj error_log().
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.