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_EXoznacza ekskluzywne blokowanie (tylko jeden proces może uzyskać blokadę), aLOCK_NBoznacza 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.