bo nie jestem pewien ale to chyba zależy od systemu / przeglądarki, w każdym razie na pewno większość wysyła \r\n (chyba że jest to ustalone standardem, nie znam sie)
i nie musisz raczej stosować pętli przy flock bo zrobiłem test - 3 skrypty bardzo podobne, pierwszy miał za zadanie zablokować plik na 30 sekund, drugi normalnie odwołać się do pliku zapisując coś do niego, trzeci to samo ale w pętli podobnej do powyższej
<?php
function nlog($s){
echo date('H:i,s') . ' - ' . $s . "<br>\r\n";
}
$f = fopen('plik.txt', 'a');
nlog('Oczekuję na dostęp do pliku');
flock($f, LOCK_EX);
nlog('Blokuję plik');
sleep(30);
flock($f, LOCK_UN);
nlog('Zwalniam plik');
fclose($f);
?>
drugi bardzo podobny:
<?php
<?php
function nlog($s){
echo date('H:i,s') . ' - ' . $s . "<br>\r\n";
}
$f = fopen('plik.txt', 'a');
nlog('Oczekuję na dostęp do pliku');
flock($f, LOCK_EX);
nlog('Blokuję plik');
fwrite($f, 'Costam');
sleep(10);
flock($f, LOCK_UN);
nlog('Zwalniam plik');
fclose($f);
?>
a trzeci jeszcze bardziej:
<?php
function nlog($s){
echo date('H:i,s') . ' - ' . $s . "<br>\r\n";
}
$f = fopen('plik.txt', 'a');
nlog('Oczekuję na dostęp do pliku');
while(!flock($f, LOCK_EX))
nlog('Ponawiam próbę');
nlog('Blokuję plik');
sleep(10);
flock($f, LOCK_UN);
nlog('Zwalniam plik');
fclose($f);
?>
wszystkie skrypty potem wypisały log który wyglądał następująco:
Skrypt 1:
15:55,43 - Oczekuję na dostęp do pliku
15:55,43 - Blokuję plik
15:56,13 - Zwalniam plik
Skrypt 2:
15:55,48 - Oczekuję na dostęp do pliku
15:56,13 - Blokuję plik
15:56,23 - Zwalniam plik
Skrypt 3:
15:55,50 - Oczekuję na dostęp do pliku
15:56,23 - Blokuję plik
15:56,33 - Zwalniam plik
jak widać funkcja flock grzecznie czeka na dostęp do pliku, nie trzeba jej robić pętli
pętla nie zrobiło ani jednego dodatkowego obrotu bo inaczej w 3 skrypcie pisałoby "Ponawiam próbę", więc flock zwraca false kiedy nie może naprawdę uzyskać dostępu do pliku i wypadałoby zakończyć działanie skryptu, inaczej może dojść do nieskończonej pętli