Funkce flock()

7 příspěvků

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. Přeji dobrý den, soubor, který budu načítat skriptem, bude na severu pravidelně aktualizován prostřednictví FTP. Jak je realná možnost kolize čtení ze souboru a kopírování aktualizované verze? Je možné ošetřit tuto situaci pomocí funkce flock()?
  2. IMHO ano: http://www.webzdarma.cz/forum/read.php?f=2&i=20897&t=20872
  3. Akorát si dej pozor na varování z manuálu: "Na většině operačních systémů je funkce flock() implementována na úrovni procesů. Při použití multithreadového serverového API (jako je ISAPI) nemůžete spoléhat na ochranu souborů proti jiným PHP skriptům běžícím v paralelních vláknech stejné instance serveru!" http://us2.php.net/flock
  4. flock neni 100% uplne nejlepsi je zapisovat do souboru v rezimu append a pak jej (pokud to potrebujeme) pri vypisu obratit resp. nechat ho zobrazit od konce napr. $my_file = file("nejaky soubor"); $my_file = array_reverse($my_file); echo $my_file;
  5. Děkuji za reakce, to s tím "Na většině operačních systémů je funkce flock() implementována na úrovni procesů..." jsem v manuálu PHP také četl. Já chci soubor pouze číst a to asi dělá situaci jednodušší. Pokud by ke kolizi mělo dojít, tak ne s jiným PHP skriptem ale s procesem, který prostředníctvím FTP zapisuje novou verzi čteného souboru, a které běží na nějakém paralelním vlákně (asi ?).Možná to ani problém není a ve fs serveru je to nějak ošetřeno
  6. Flock je v tomto případě zbytečný, viz man flock: flock(2) places advisory locks only; given suitable per- missions on a file, a process is free to ignore the use of flock(2) and perform I/O on the file. S dodatkem, že ftp server bude flock vytvořený na souboru pomocí PHP při updatu souboru téměř jistě ignorovat. Na druhou stranu bych si s tím zas tak nelámal hlavu, protože u read/write kolize nemůže dojít ke ztrátě/zničení dat.
  7. Asi ano, setkal jsem se s názorem, že FTP soubory při aktualizaci nezamyká a výsledek kolize bude načtení části souboru a tak asi bude stačit, když budu testovat jestli se něco jako konec souboru

← Zpět na všechna témata