Studiuję steryzm w języku PHP i mam problem ze zrozumieniem funkcjonalności trybu LOCK_SH. Czytam na stronie, że blokuje ona plik, aby inne skrypty nie mogły go WRITE, ale mogą ODCZYTAĆ z niego. Jednak poniższy kod nie wydają się działać zgodnie z oczekiwaniami: W file1.php mam:Jak działa LOCK_SH?
$fp = fopen('my_file.txt','r');
flock($fp, LOCK_SH);
sleep(20);
flock($fp, LOCK_UN);
I file2.php mam
$fp = fopen('my_file.txt','a');
fwrite($fp,'test');
uruchomić pierwszy skrypt, który blokuje plik przez 20 sekund. Po uruchomieniu blokady uruchamiam plik file2.php, który natychmiast kończy jego wykonywanie, a po otwarciu pliku "my_file.txt" został do niego dołączony napis "test" (mimo że plik "file1.php" nadal działał). Próbuję zmienić plik "file2.php", tak aby był czytany z zablokowanego pliku i był czerwony od niego bez żadnych problemów. Tak więc, widocznie ... szwy "LOCK_SH" nie robią nic. Jednakże, jeśli użyję LOCK_EX tak, to blokuje plik, żaden skrypt nie może pisać lub czytać z pliku. Używam Easy PHP i uruchamiam go pod Windows 7.
Teraz rozumiem. Przetestowałem mechanizm, który wyjaśniłeś i działał bez żadnych problemów. Jesteś najlepszy. –