Rozdział 7. ♦ System plików 201
Listing 7.11. Odczyt zawartości pliku za pomocą funkcji fgetc <html>
<head>
<title>Odczyt zawartości pliku tekstowego</title> </head>
<body>
<?php
if(!$fd - fopen('test.txt'. 'r')) exit("Nie mogę otworzyć pliku test.txt"): while(($str = fgetc(Sfd)) != false){ if($str = "\n") $str - "<br>“: echo(Sstr);
}
fclose(Sfd):
?>
</body>
</html>
Kiedy chcemy odczytać określoną liczbę bajtów lub też odczytujemy dane z pliku binarnego, powinniśmy użyć funkcji fread. Jej wywołanie ma postać: fread{deskryptor. ile)
gdzie deskryptor to deskryptor pliku zwrócony przez funkcję fopen, a i le określa liczbę bajtów do odczytania. Funkcja zwraca odczytany fragment pliku w postaci ciągu typu string. Należy pamiętać, że w przypadku plików binarnych i systemów rozróżniających pliki binarne i tekstowe (takie jak Windows) plik powinien być otwarty w trybie binarnym (np. rb, wb). Odczyt pliku i wysłanie jego zawartości do przeglądarki można przeprowadzić np. za pomocą kodu widocznego na listingu 7.12. Dane odczytywane są w blokach po 4096 bajtów.
Listing 7.12. Odczyt pliku za pomocąfunkcji fread <?php
if(!$fd = fopenCtest.txt'. 'rb')) exit("Nie mogę otworzyć pliku test.txt"): while(!feof($fd)){ echo fread($fd. 4096):
fclose(Sfd):
Tego typu skrypt można również przekonstruować w taki sposób, aby nie zachodziła konieczność wywoływania funkcji feof testującej osiągnięcie końca pliku. Wedle dokumentacji PHP zostanie wtedy osiągnięta większa wydajność, choć będzie miało to znaczenie jedynie przy odczycie dużych plików. Przeróbka opiera się na spostrzeżeniu, że jeżeli ciąg zwrócony przez wywołanie fread będzie miał długość 0 bajtów, będzie to oznaczać, że zostały już odczytane wszystkie dane z pliku. Pozwala to na skonstruowanie pętli do.. .while w postaci przedstawionej na listingu 7.13.