202 PHP i MySQL dla każdego
Listing 7.13. Alternatywna metoda odczytu całego pliku przy użyciu funkcji fread
<?php
if(!$fd - fopenCtest.txt'. 'rb‘)) exit("Nie mogę otworzyć pliku test.txt"): do{
$str - fread($fd. 4096): if(strlen($str) — 0) break: echo(Sstr):
}
while(true):
fclose(Sfd):
Jeśli zamierzamy odczytać naraz całą zawartość pliku, można to zrobić na kilka sposobów. Sposób pierwszy to wykorzystanie przedstawionej powyżej funkcji fread, której jako drugi argument zostanie przekazana wielkość pliku. Wartość tego argumentu możemy uzyskać wywołując funkcję filesize. Przykładowy kod odczytujący tą metodą całą zwartość pliku test.txt został przedstawiony na listingu 7.14.
Listing 7.14. Odczytanie całej zawartości pliku za pomocą funkcji fread_
<?php
Sfilenane = 'test.txt': if(!$fd = fopen($filename. 'rb')) exit(”Nie mogę otworzyć pliku Jfilename"): echo fread($fd. filesize($filename)): fclose(Jfd):
?>
Czynność taka może jednak zostać przeprowadzona znacznie prościej, jeśli skorzystamy z funkcji dedykowanych fpassthru lub readfile. Wywołanie funkcji fpassthru ma schematyczną postać: fpassthru(deskryptor)
gdzie deskryptor to wskaźnik pliku zwrócony przez wywołanie funkcji fopen. Funkcja odczytuje zawartość pliku i wysyła ją do standardowego wyjścia — w typowych zastosowaniach do przeglądarki. Zwracaną wartością jest liczba odczytanych bajtów lub też wartość fal se, jeżeli odczyt nie zakończył się powodzeniem. Odczyt i wysłanie do przeglądarki zawartości testowego pliku można zatem przeprowadzić za pomocą następującego fragmentu kodu:
<?php
if(!$fd = fopenCtest.txt". 'rb')) exit("Nie mogę otworzyć pliku test.txt"); fpassthru($fd): fclose($fd):