Blokowanie plików podczas zapisu (flock)
Założenie: Zapobieżenie konfliktom podczas zapisu do pliku przez wiele procesów jednocześnie, poprzez blokowanie dostępu do pliku.
Krok po kroku:
- Otwarcie pliku: Używamy funkcji
fopen()
do otwarcia pliku w trybie zapisu (“w”). Jeśli plik nie istnieje, zostanie utworzony.$plik = fopen('moj_plik.txt', 'w');
- Blokowanie pliku: Funkcja
flock()
blokuje plik.LOCK_EX
oznacza ekskluzywne blokowanie (tylko jeden proces może uzyskać blokadę), aLOCK_NB
oznacza nieblokujące blokowanie (funkcja zwrócifalse
, jeśli plik jest już zablokowany).if (flock($plik, LOCK_EX | LOCK_NB)) { // Plik jest zablokowany, możemy bezpiecznie zapisać dane } else { // Plik jest już zablokowany echo "Błąd: Plik jest już zablokowany!"; exit; }
- Zapis danych do pliku: Używamy funkcji
fwrite()
do zapisu danych do pliku.$dane = "To są moje dane.\n"; fwrite($plik, $dane);
- Zwolnienie blokady: Po zakończeniu zapisu zwalniamy blokadę za pomocą funkcji
flock()
z argumentemLOCK_UN
.flock($plik, LOCK_UN);
- Zamknięcie pliku: Zamykamy plik za pomocą funkcji
fclose()
.fclose($plik);
Pamiętaj, aby obsłużyć ewentualne błędy, np. brak możliwości otwarcia pliku.
Ten przykład pokazuje podstawowe użycie funkcji flock()
do blokowania plików w PHP. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi opcjami blokowania.