Blokowanie plików podczas odczytu (flock)
Założenie: Zapobieżenie konfliktom dostępu do pliku podczas jednoczesnego odczytu przez wiele procesów, poprzez blokowanie pliku.
Krok po kroku:
- Otwarcie pliku: Otwieramy plik w trybie odczytu za pomocą funkcji
fopen()
. Jeśli plik nie istnieje, funkcja zwrócifalse
. - Blokowanie pliku: Używamy funkcji
flock()
, aby zablokować plik w trybie współdzielonym (LOCK_SH
). Oznacza to, że inne procesy mogą odczytywać plik, ale nie mogą go modyfikować. - Odczyt danych: Odczytujemy zawartość pliku za pomocą funkcji
fread()
lub innych odpowiednich funkcji. - Zwolnienie blokady: Po zakończeniu odczytu zwalniamy blokadę za pomocą funkcji
flock()
z parametremLOCK_UN
.
$plik = fopen('dane.txt', 'r');
if ($plik === false) {
die('Błąd otwarcia pliku!');
}
if (!flock($plik, LOCK_SH)) {
die('Błąd blokowania pliku!');
}
$zawartosc = fread($plik, filesize('dane.txt'));
echo $zawartosc;
flock($plik, LOCK_UN);
fclose($plik);
Pamiętaj o obsłudze błędów! Funkcje fopen()
i flock()
mogą zwrócić false
w przypadku wystąpienia problemów. Zawsze sprawdzaj zwracane wartości.
Ten przykład pokazuje podstawowe użycie funkcji flock()
do blokowania plików podczas odczytu. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi trybami blokowania.