Czytanie z wielu plików jednocześnie

Założenie: Nauczymy się, jak odczytywać dane z wielu plików jednocześnie w PHP, wykorzystując funkcję stream_select().

Krok po kroku:

  1. Przygotowanie plików: Utwórzmy trzy pliki tekstowe (plik1.txt, plik2.txt, plik3.txt) z przykładową zawartością. Na przykład:
  2. 
    // Zawartość plik1.txt
    echo "To jest plik pierwszy.";
    
    // Zawartość plik2.txt
    echo "To jest plik drugi.";
    
    // Zawartość plik3.txt
    echo "To jest plik trzeci.";
    				
  3. Otwarcie strumieni: Otwieramy trzy strumienie plików za pomocą funkcji fopen().
  4. 
    $plik1 = fopen('plik1.txt', 'r');
    $plik2 = fopen('plik2.txt', 'r');
    $plik3 = fopen('plik3.txt', 'r');
    
    if ($plik1 === false || $plik2 === false || $plik3 === false) {
        die("Błąd podczas otwierania plików!");
    }
    				
  5. Użycie stream_select(): Funkcja stream_select() pozwala na monitorowanie wielu strumieni jednocześnie. Czeka ona na dostępność danych do odczytu z co najmniej jednego strumienia.
  6. 
    $read = [$plik1, $plik2, $plik3];
    $write = null;
    $except = null;
    
    while (true) {
        $changed = stream_select($read, $write, $except, null); // null oznacza brak timeoutu
    
        if ($changed === false) {
            die("Błąd stream_select()");
        }
    
        if ($changed > 0) {
            foreach ($read as $stream) {
                if (feof($stream)) {
                    fclose($stream);
                    unset($read, array_search($stream, $read)); // Usuwamy zamknięty strumień
                    continue;
                }
                $dane = fgets($stream);
                echo "Odczytano: " . $dane . "
    "; } } }
  7. Zamknięcie strumieni: Po zakończeniu odczytu należy zamknąć strumienie plików za pomocą funkcji fclose().
  8. 
    fclose($plik1);
    fclose($plik2);
    fclose($plik3);
    				

Pamiętaj o obsłudze błędów, np. sprawdzeniu, czy pliki istnieją i czy udało się je otworzyć.

Ten przykład pokazuje podstawy jednoczesnego odczytu z wielu plików. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi konfiguracjami i funkcjami.

Dodaj komentarz 0

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