52568.fb2
Функция fread
Эта функция осуществляет чтение данных из файла. Ее можно использовать и для чтения данных из бинарных файлов, не опасаясь их повреждения. Синтаксис fread() такой:
string fread (указатель на файл, длина)
При вызове этой функции происходит чтение данных длины (в байтах), определенной параметром длина, из файла, на который указывает указатель на файл. Параметр указатель на файл должен быть реально существующей переменной типа ресурс, содержащей в себе связь с файлом, открытую, например, с помощью функции fopen(). Чтение данных происходит до тех пор, пока не встретится конец файла или пока не будет прочитано указанное параметром длина число байтов.
В результате работы функция fread() возвращает строку со считанной из файла информацией.
Как вы заметили, в этой функции параметр длина - обязательный. Следовательно, если мы хотим считать весь файл в строку, нужно знать его длину. PHP может самостоятельно вычислить длину указанного файла. Для этого нужно воспользоваться функцией filesize(имя файла). В случае ошибки эта функция вернет false. К сожалению, ее можно использовать только для получения размера локальных файлов.
Пример 9.4. Прочитаем содержимое файла my_file.html
<?php
$h = fopen("my_file.html","r+");
// отрываем файл на запись и чтение
$content = fread($h,
filesize("my_file.html"));
// считываем содержимое файла в строку
fclose($h); // закрываем соединение с файлом
echo $content;
// выводим содержимое файла
// на экран браузера
?>
Для того чтобы считать содержимое бинарного файла, например изображения, в таких системах, как Windows, рекомендуется открывать файл с помощью флага rb или ему подобных, содержащих символ b в конце.
Функция filesize() кэширует результаты своей работы. Если изменить содержимое файла my_file.html и снова запустить приведенный выше скрипт, то результат его работы не изменится. Более того, если запустить скрипт, считывающий данные из этого файла с помощью другой функции (например, fgetss), то результат может оказаться таким, как если бы файл не изменился. Чтобы этого избежать, нужно очистить статический кэш, добавив в код программы команду clearstatcache();
Функция fgets
С помощью функции fgets() можно считать из файла строку текста. Синтаксис этой функции практически такой же, как и у fread(), за исключением того, что длину считываемой строки указывать необязательно:
string fgets ( указатель на файл [, длина])
В результате работы функция fgets() возвращает строку длиной (длина-1) байт из файла, на который указывает указатель на файл. Чтение заканчивается, если прочитано (длина-1) символов и встретился символ перевода строки или конец файла. Напомним, что в PHP один символ - это один байт. Если длина считываемой строки не указана (данная возможность появилась начиная с PHP 4.2.0), то считывается 1 Кбайт (1024 байт) текста или, что то же самое, 1024 символа. Начиная с версии PHP 4.3, если параметр длина не задан, считывается строка целиком. В случае ошибки функция fgets() возвращает false. Для версий PHP начиная с 4.3 эта функция безопасна для двоичных файлов.
<?php
$h = fopen("my_file.html","r+");
$content = fgets($h,2);
// считает первый символ из
// первой строки файла my_file.html
fclose($h);
echo $content;
?>
Обе функции, fread() и fgets(), прекращают считывание данных из файла, если встречают конец файла. В PHP есть специальная функция, проверяющая, смотрит ли указатель позиции файла на конец файла. Это булева функция feof(), в качестве параметра которой передается указатель на соединение с файлом.
Например, вот так можно считать все строки файла my_file.html:
<?php
$h = fopen("my_file.html","r");
while (!feof ($h)) {
$content = fgets($h);
echo $content,"<br>";
}
fclose($h);
?>
Функция fgetss
Существует разновидность функции fgets() - функция fgetss(). Она тоже позволяет считывать строку из указанного файла, но при этом удаляет из него все встретившиеся html-теги, за исключением, быть может, некоторых. Синтаксис fgetss() такой:
string fgetss(указатель на файл,
длина [, допустимые теги])
Обратите внимание, что здесь аргумент длина обязательный.
Пример 9.6. Пусть у нас имеется файл my_file.html следующего содержания:
<h1>Без труда не вынешь и рыбку из пруда.</h1>