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:
- Przygotowanie plików: Utwórzmy trzy pliki tekstowe (plik1.txt, plik2.txt, plik3.txt) z przykładową zawartością. Na przykład:
- Otwarcie strumieni: Otwieramy trzy strumienie plików za pomocą funkcji
fopen()
. - 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. - Zamknięcie strumieni: Po zakończeniu odczytu należy zamknąć strumienie plików za pomocą funkcji
fclose()
.
// Zawartość plik1.txt
echo "To jest plik pierwszy.";
// Zawartość plik2.txt
echo "To jest plik drugi.";
// Zawartość plik3.txt
echo "To jest plik trzeci.";
$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!");
}
$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 . "
";
}
}
}
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.