Buforowanie przy zapisie plików
Założenie: Nauczymy się, jak wykorzystać buforowanie w PHP do zwiększenia wydajności zapisu dużych plików, unikając częstych operacji wejścia/wyjścia.
Krok po kroku:
- Otwarcie pliku w trybie zapisu z włączonym buforowaniem:
- Ustawienie rozmiaru bufora:
- Zapisywanie danych do bufora i wypłukiwanie bufora:
- Zamknięcie pliku:
$file = fopen('duzy_plik.txt', 'wb'); // 'wb' - tryb binarny zapisu
if ($file === false) {
die('Błąd otwarcia pliku!');
}
Funkcja fopen()
otwiera plik. 'wb'
oznacza binarny zapis, co jest zalecane dla większych plików. Sprawdzenie, czy otwarcie się powiodło, jest kluczowe.
$bufferSize = 8192; // Rozmiar bufora w bajtach (8KB) - dostosuj do potrzeb
Zmienna $bufferSize
definiuje rozmiar bufora. Większy bufor może przyspieszyć zapis, ale zużyje więcej pamięci.
$data = 'To jest przykładowa treść do zapisu w dużym pliku.';
$data .= str_repeat(' ', 1024 * 1024); // Dodanie 1MB danych testowych
for ($i = 0; $i < 100; $i++) {
fwrite($file, $data);
if (ftell($file) % $bufferSize == 0) {
fflush($file); // Wypłukuje bufor co 8KB
}
}
Pętla zapisuje dane do pliku. fflush()
wymusza zapis bufora do dysku co 8KB, co zmniejsza obciążenie systemu plików. ftell()
zwraca aktualną pozycję w pliku.
fclose($file);
Funkcja fclose()
zamyka plik i zapisuje pozostałe dane z bufora.
Ten przykład pokazuje podstawy buforowania przy zapisie plików w PHP. Eksperymentuj z różnymi rozmiarami bufora, aby znaleźć optymalne ustawienie dla Twojego systemu i rodzaju danych.