Чтение из файла

Функции чтения файла позволяют:

· вывести содержимое файла на экран;

· прочитать фрагмент файла заданной длины;

· вывести содержимое остатка файла на экран;

· прочитать файл по символам;

· обработать ситуацию достижения конца файла;

· прочитать файл по строкам;

· прочитать строку отформатированного файла;

· прочитать отформатированную строку.

Вывод содержимого файла на экран выполняется с помощью функции

int readfile(string filename [, bool use_include_path])

В параметре filename задается имя файла. Как и в функции fopen, файл может быть локальным или доступным по протоколам HTTP и FTP. Функция возвращает количество прочитанных байт файла.

Если параметр use_include_path установлен в true, то локальный файл ищется в пути, установленном переменной окружения include_path, содержащих список каталогов, в которых выполняется поиск фрагментов страниц PHP, вставляемых с помощью инструкций include или require. По умолчанию параметр use_include_path установлен в false.

Пример 4.6.143. Использование функции readfile():

Этот фрагмент программы

// Вывод заголовка

print "File StudentNames.txt:\n";

// Вывод содержимого файла на экран

$fileBytesNumber = readfile("D:/PHPData/StudentNames.txt");

// Вывод количества байт в файле

print "\nVolume: $fileBytesNumber bytes";

выводит на экран содержимое файла StudentNames.txt, полученного в примерах 4.6.141(1) и 4.6.141(3):

Прочитать фрагмент файла можно с помощью функции

string fread(int fp, int length)

Эта функция читает строку длиной length-1 из файла с дескриптором fp. Если раньше встречается конец файла (eof), строка возвращается уменьшенной длины. Если чтение выполнено успешно, функция возвращает прочитанную строку, иначе возвращает значение false. Эту функцию можно использовать для чтения как текстовых, так и двоичных файлов.

Вывести содержимое остатка файла на экран можно с помощью функции

int fpassthru(int fp)

Параметр fp этой функции задает дескриптор файла. Если чтение выполнено успешно, функция возвращает количество прочитанных байт, иначе возвращает значение false.

Пример 4.6.144. Использование функций fread()и fpassthru():

Этот фрагмент программы

// Открытие файла StudentNames.txt для чтения

$inputFile = fopen("D:/PHPData/StudentNames.txt", "r");

// Чтение первых 10 байт файла

$outputString = fread($inputFile, 11);

// Вывод прочитанного фрагмента файла

print "First part of file: '$outputString'";

// Вывод остатка файла на экран

print "\nLast part of file: '";

fpassthru($inputFile); print "'";

// Закрытие файла для чтения

fclose($inputFile);

выводит на экран содержимое фрагментов файла StudentNames.txt, полученного в примерах 4.6.141(1) и 4.6.141(3):

Прочитать файл по символам можно с помощью функции

string fgetc(int fp)

Эта функция возвращает очередной символ файла с дескриптором fp или false, если достигнут конец файла.

Если файл читается по частям (строкам), то при достижении окончания файла чтение следующей записи приведет к ошибке. Чтобы обработать ситуацию достижения конца файла, используется функция

bool feof(int fp)

Эта функция возвращает значение true, если считанная запись – последняя в файле или произошла ошибка ввода/вывода, в противном случае возвращает false.

Пример 4.6.145. Использование функций fgetc() и feof():

Посимвольное чтение файла StudentNames.txt, полученного в примерах 4.6.141(1) и 4.6.141(3), и присвоение каждой строки файла элементу массива:

// Создание пустого массива

$namesArray = array();

// Начальное значение индекса массива

$i = 0;

// Открытие файла StudentNames.txt для чтения

$inputFile = fopen("D:/PHPData/StudentNames.txt", "r");

// Текущее значение - пустая строка

$currentValue = '';

// Ввод символов в цикле пока

// не будет достигнут конец файла

while(!feof($inputFile))

{

// Ввод текущего символа

$symbol = fgetc($inputFile);

// Если символ - конец строки

// или достигнут конец файла

if($symbol == "\n" || $symbol == false)

{

// Присвоение текущего значения

// элементу массива

$namesArray[$i] = $currentValue;

// Новое текущее значение - пустая строка

$currentValue = '';

// Увеличение индекса элемента массива на 1

$i++;

}

else

// Добавление символа в текущее значение

$currentValue.= $symbol;

}

// Закрытие файла для чтения

fclose($inputFile);

// Вывод полученного массива

print "\n\$namesArray: "; print_r($namesArray);

Вывод этого фрагмента программы будет иметь следующий вид:

Прочитать файл по строкам можно с помощью функций fgets(), fgetss() и file().

Функция

string fgets(int fp [, int length])

читает строку из файла с дескриптором fp. Если чтение выполнено успешно, функция возвращает прочитанную строку, иначе возвращает значение false. Чтение заканчивается при достижении символа перевода строки ("\n" в Unix, "\r\n" в Windows или "\r" в Macintosh) или при вводе length-1 символов (если задан второй параметр и количество введенных символов меньше длины строки) или при достижении конца файла. Символ перевода строки входит в возвращаемое значение строки.

Функция

string fgetss(int fp,

int length [, string allowable_tags])

аналогична функции fgets(), но при чтении отбрасываются начальные и конечные теги HTML. Параметр allowable_tags указывает список тегов, которые остаются в возвращаемой строке. Если этот параметр не задан, пропускаются все теги.

Пример 4.6.146. Использование функции gets():

1. Следующие предложения читают строки из файла StudentNames.txt, записанного в примерах 4.6.141(1) и 4.6.141(3):

// Открытие файла StudentNames.txt для чтения

$inputFile = fopen("D:/PHPData/StudentNames.txt", "r");

// Чтение из файла фамилий студентов в цикле

for($i = 0;!feof($inputFile); $i++)

{

// Чтение текущей строки

$inputString = fgets($inputFile);

// Удаление в конце строки

// символа перехода на новую строку

$inputString = rtrim($inputString, "\n");

// Вывод текущей фамилии

echo "\n\$studentName[$i]=", $inputString;

}

// Закрытие файла для чтения

fclose($inputFile);

На экран будут выведены следующие строки:

2. Следующие предложения читают данные из файла, записанного в примере 4.6.141(2):

// Открытие файла StudentNames1.txt для чтения

$inputFile = fopen("D:/PHPData/StudentNames1.txt", "r");

// Чтение строки фамилий

$inputString = fgets($inputFile);

// Вывод строки фамилий

echo "\n", $inputString;

// Закрытие файла для чтения

fclose($inputFile);

На экран будут выведены следующие строки:

Функция

array file(string filename [, int flags])

возвращает массив строк файла с именем filename. Параметр flags содержит флажки, которые могут принимать следующие значения:

· FILE_USE_INCLUDE_PATH – действует аналогично параметру в функции readfile();

· FILE_IGNORE_NEW_LINES – не добавляет символы перехода на новую строку в конце каждого элемента массива;

· FILE_SKIP_EMPTY_LINES – пропускает пустые строки в файле;

· FILE_TEXT – выводит содержимое элементов массива в кодировке UTF-8.

В параметре flags можно задать несколько флажков, отделенных друг от друга символом "|".

Пример 4.6.147. Использование функции file():

В результате выполнения предложений для файла StudentNames.txt, записанного в примерах 4.6.141(1) и 4.6.141(3):

// Занесение строк прочитанного файла в массив

$studentName = file("D:/PHPData/StudentNames.txt",

FILE_IGNORE_NEW_LINES);

// Вывод полученного массива

print "\n\$studentName: "; print_r($studentName);

на экран будут выведены следующие строки:

Прочитать строку отформатированного файла можно с помощью функции

mixed fscanf(int fp, string format [, mixed var1...])

Параметр fp задает дескриптор файла. Формат входных данных задается в строке format (аналогично функциям fprintf(), printf(), sprintf()и vsprintf() – см. 4.6.19.4.2). Если функция имеет только два параметра – fp и format, прочитанные данные возвра­щаются в виде массива. Если число параметров больше двух, то прочитанные данные записывают­ся, соответственно, в третий, четвертый и т. д. параметры. Параметры необ­ходимо передавать как ссылки (с символом "&" перед переменной).

Пример 4.6.148. Использование функции fscanf():

В этом фрагменте программы читаются форматированные строки, записанные в файл Variables.txt в примере 4.6.142:

// Открытие файла Variables.txt для чтения

$inputFile = fopen("D:/PHPData/Variables.txt", "r");

// Чтение строки фамилий

$varArray1 = fscanf($inputFile, "%5d %8e %8f");

$varArray2 = fscanf($inputFile, "%s %s %s");

// Закрытие файла для чтения

fclose($inputFile);

// Присвоение значений переменным $a, $b и $c

list($a, $b, $c) = $varArray1;

// Вывод значений переменных $a, $b и $c

print "\$a=$a \$b=$b \$c=$c";

// Присвоение значений переменным $d, $e и $f

list($d, $e, $f) = $varArray2;

// Преобразование переменной $f в целое число

$f = (int)ltrim($f, "*");

// Вывод значений переменных $d, $e и $f

print "\n\$d=$d \$e=$e \$f=$f";

Вывод этого фрагмента имеет следующий вид:

Прочитать отформатированную строку можно с помощью функции

mixed sscanf(string input, string format [, mixed var1...])

Эта функция выполняется так же, как функция fscanf(), но вводимые данные берутся не из файла, а из строки input.

Пример 4.6.149. Использование функции sscanf():

В этом фрагменте программы читаются все строки файла Variables.txt, созданного в примере 4.6.142, а затем из них с помощью функции sscanf() считываются сохраненные в них переменные:

// Занесение строк прочитанного файла в массив

$varArray = file("I:/TestPHP/Variables.txt",

FILE_IGNORE_NEW_LINES);

// Чтение первой форматированной строки массива

sscanf($varArray[0], "%d %e %f", $a, $b, $c);

// Чтение первой форматированной строки массива

sscanf($varArray[1], "%s %s %s", $d, $e, $f);

// Преобразование переменной $e в целое число

$f = (int)ltrim($f, "*");

// Вывод значений переменных $a, $b и $c

print "\$a=$a \$b=$b \$c=$c";

// Вывод значений переменных $d, $e и $f

print "\n\$d=$d \$e=$e \$f=$f";

Вывод этого фрагмента программы совпадает с выводом предыдущего примера (4.6.148).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: