Введение в программирование на PHP5


Чтение файлов


Этот раздел описывает, как использовать PHP для чтения содержимого файлов в системах Windows.

Для чтения файлов в PHP имеются функции fread() и filesize(). Они определяются ниже.

fread(указатель_ресурса, длина) – функция, используемая для чтения содержимого файла. Читает указанное количество байтов "длина" из файла "указатель_ресурса". Чтение останавливается, когда будет прочитано заданное количество байтов ("длина") или будет достигнут маркер EOF (end of file). Функция требует два параметра – указатель файла, который создается, когда файл открывается с помощью функции fopen(), и размер, который определяет, какая часть содержимого будет считана.

fgetcsv(указатель_ресурса, длина, ограничитель) – функция, используемая для чтения содержимого файла и анализа данных для создания массива. Данные разделяются параметром-ограничителем, задаваемым в функции.

filesize(имя_файла) – возвращает размер файла. Если возникает ошибка, функция возвращает значение false.

Следующий пример иллюстрирует, как прочитать все содержимое файла:

fileread.php

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$newfile = @fopen($filename, "r") or exit("Невозможно открыть файл!");

$file_contents = @fread($newfile, filesize($filename)) or exit("Невозможно прочитать содержимое файла!");

fclose($newfile);

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет открыт для чтения:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и используется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла применяется для ссылки на только что открытый файл:

$newfile = fopen($filename, "r");

Указатель файла является переменной PHP, которая содержит ссылку на открытый файл. Он будет задействован позже с функцией fread() для чтения содержимого из открытого файла.

Затем создается переменная с именем $file_contents и используется для хранения содержимого текстового файла myfile.txt. Первый параметр функции fread() указывает на имя файла, содержимое которого будет прочитано. Второй параметр определяет длину файла. Если длина файла неизвестна, можно воспользоваться специальной функцией PHP с именем filesize(), которая определяет длину файла. Она требует один параметр – имя или путь доступа файла, который читается в данный момент.




$file_contents = fread($newfile, filesize($filename));

Все содержимое текстового файла хранится теперь в переменной $file_contents. Эти данные можно выводить на экране с помощью оператора echo или записать в другой текстовый файл.

В некоторых случаях может понадобиться прочитать и работать с отдельными частями содержимого текстового файла. При использовании fread() все содержимое файла хранится в одной переменной, что затрудняет работу с отдельными частями файла. Если текстовый файл содержит разграничители для разделения отдельных фрагментов данных, можно применить для чтения другую функцию чтения — fgetcsv(). Эта функция читает содержимое файла и создает массив, делая доступными определенные части текста.

Предположим, что текстовый файл numbers.txt существует и содержит следующие данные:

numbers.txt

50,17,34,90

Следующий сценарий демонстрирует использование функции fgetcsv() для чтения содержимого текстового файла.

fileread.php

<?php

$filename = "C:/numbers.txt";

$newfile = @fopen($filename, "r") or exit("Could not open file");

$file_contents = @fgetcsv($newfile, filesize($filename),",") or exit("Could not read file contents");

while ($i=0; $i < sizeof($file_contents); $i++) { echo $file_contents[$i]; echo "<br/>"; }

fclose($newfile);

?>

После открытия файла функция fgetcsv() считывает все содержимое файла, создавая массив — '$file_contents'. Третий параметр функции fgetcsv() определяет, что каждый элемент, отделенный с помощью запятой ",", станет элементом нового массива. Так как numbers.txt содержит значения 50,28,34,90, то $file_contents[0] = 50, $file_contents[1] = 28, $file_contents[2] = 34, $file_contents[3] = 90. После создания массива значениями можно манипулировать с помощью любой из функций для массивов PHP. В предыдущем примере цикл while выполняет итерации на массиве $file_contents[] и выводит каждое число.

После завершения обработки файла функция fclose() используется для закрытия открытого файла.


Содержание раздела