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:

  1. 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');
    
  2. Blokowanie pliku: Funkcja flock() blokuje plik. LOCK_EX oznacza ekskluzywne blokowanie (tylko jeden proces może uzyskać blokadę), a LOCK_NB oznacza nieblokujące blokowanie (funkcja zwróci false, 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;
    }
    
  3. Zapis danych do pliku: Używamy funkcji fwrite() do zapisu danych do pliku.
    
    $dane = "To są moje dane.\n";
    fwrite($plik, $dane);
    
  4. Zwolnienie blokady: Po zakończeniu zapisu zwalniamy blokadę za pomocą funkcji flock() z argumentem LOCK_UN.
    
    flock($plik, LOCK_UN);
    
  5. 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.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *