Скачиваний:
39
Добавлен:
04.04.2013
Размер:
728.06 Кб
Скачать

Работа с файлами

В этом разделе будут рассмотрены функции языка PHP, предназначенные для работы с файлами.

Функция fopen предназначена для открытия файлов. В общем виде вызов функции выглядит следующим образом:

fopen(имя файла, режим);

В качестве параметров, функция получает имя файла и информацию о режиме работы с файлом. Информация о возможных режимах приведена в таблице.

Режим

Описание

a

Открыть файл только для дополнения. Данные будут дописаны в ко­нец существующего файла; если файл не существует, РНР пытается создать его

a+

Открыть файл для дополнения и чтения. Данные будут дописаны в ко­нец существующего файла; если файл не существует, РНР пытается создать его

r

Открыть файл только для чтения

r+

Открыть файл для чтения и записи. Данные будут записаны в начало существующего файла

w

Открыть файл только для записи. Существующее содержимое файла будет утрачено. Если файл не существует, РНР пытается создать его

w+

Открыть файл для чтения и записи. Существующее содержимое файла будет утрачено. Если файл не существует, РНР пытается создать его

При успешном выполнении функция fopen () возвращает дескриптор файла - целое число, позволяющее ссылаться на файл при последу­ющих обращениях к нему; при неудаче функция fopen () возвращает “ложь”:

if (!$file=fopen("text.txt", "r")) {

echo "Невозможно открыть файл";

}

else {

fpassthru($file); // Вывести содержимое файла

fclose($file);

}

Программа пытается открыть файл “text.txt”, расположенный в одном каталоге с исполняемым скриптом. В случае неудачи будет выведено сообщение об ошибке. Если файл открыт успешно, функция fpassthru выведет содержимое текстового файла.

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

Для того, чтобы прочитать из файла блок данных определенной длины, нужно воспользоваться функцией fread, получающей в качестве параметров дескриптор файла и длину считываемого блока. Если конец файла достигнут прежде, чем прочитано заданное количество символов, функция fread возвратит все символы, которые удалось прочитать.

if (!$file=fopen("text.txt", "r")) {

echo "Невозможно открыть файл";

}

else {

$text=fread($file,10); // Прочесть первые 10 символов

fclose($file);

}

Функция fgetc используется для чтения из файла одного символа. Единственный параметр, который принимает fgetc - дескриптор от­крытого файла. Возвращаемое значение является строкой из одного символа, или значением “ложь” (пустил строка), если достигнут конец файла. Следующая программа читает первый символ файла:

if (!$file=fopen("text.txt", "r")) {

echo "Невозможно открыть файл";

}

else {

$char=(fgetc($file)); // Прочитать первый символ файла

fclose($file);

}

Хотя этот метод можно использовать для поочередного прочтения всех символов файла, очевидно, что для чтения всего файла он неэффективен. Функция fgets позволяет прочесть строку заданной длины:

Помимо дескриптора файла функция fgets принимает в качестве параметра количество символов (плюс один), которые нужно прочесть из файла. Следует заметить, что указываемое количество считываемых символов на единицу больше фактического количества прочтенных символов. Чтение завершится, если будет достигнут символ перевода строки или конец файла, поэтому peaльное количество возвращенных символов нельзя предсказать. Функция возвращает строку или значение “ложь”, если произойдет ошибка.

if (!$file=fopen("text.txt", "r")) {

echo "Невозможно открыть файл";

}

else {

$text=(fgets($file,11)); // Прочесть-первые 10 символов

fclose($file);

}

Для записи строки в файл используются функции fputs или fwrite. Их вызов совершенно идентичен, параметрами служат дескриптор файла, в который осуществляется запись, строка, записываемая в файл, и (необязательный параметр) количество символов, которое нужно записать в файл из строки. Если последний параметр не указан, записыва­ется вся строка. В случае успеха возвращаемым значением является “истина”, а в случае неудачи – “ложь”.

if ($file=fopen("text.txt", "a")) {

fputs($file,"Текстовая строка"); //Дописать строку в конец файла

}

Одной из важнейших проблем при работе с файлами является проблема позиционирования указателя внутри файла. Это необходимо для того, чтобы иметь возможность обратиться к произвольному фрагменту данных внутри файла. В PHP реализовано несколько функций для перемещения внутри открытого файла.

Простейшей функцией является rewind. Она устанавливает текущую по­зицию в начало файла. Единственным параметром функции является дескриптор соответствующего файла. Возвращаемым значением является “истина” в случае успеха и “ложь” в случае неудачи.

rewind($file);

Для перемещения на заданную позицию в файле используется функция fseek. Параметрами функции являются файловый дескриптор и смещение, указывающее, на сколько байт необходимо сместиться от начала файла. Следует заметить, что, в отличие от большинства других функций PHP, fseek возвращает -1 при ошибке, а в случае успеха 0.

fseek($file,1);

В результате указатель позиции файла устанавливается после первого сим­вола файла.

Узнать текущую позицию в файле мож­но с помощью функции ftell. В качестве параметра функция получает дескриптор файла.

echo ftell($file);

На экран будет выведено текущее положение указателя внутри файла.

Другой полезной функцией является feof, которая указывает, находится текущая позиция в конце файла или нет. Она возвращает “истина”, если текущая позиция в файле на­ходится в конце файла. В противном случае возвра­щается “ложь”. Эта функция обычно используется при циклическом проходе по файлу:

if (!$file=fopen("text.txt", "r")) {

echo("Невозможно открыть файл");

}

else {

while (!feof($file)) {

echo fgetc($file);

}

}

Этот сценарий считывает символы файла text.txt по одному до тех пор, по­ка не будет достигнут конец файла.

Помимо чтения и записи РНР позволяет копировать файлы из одного каталога в другой, удалять их и переименовывать.

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

Удаление файла осуществляется при помощи функции unlink, получающей в качестве параметра имя удаляемого файла.

Для переименования файла используется функция rename, получающая в качестве параметра старое и новое имя файла.

copy ("text.txt", "temp/text2.txt");

rename ("text.txt", "old.txt");

unlink ("old.txt");

Программа копирует файл text.txt в каталог temp под именем text2.txt, переименовывает исходный файл text.txt в old.txt, после чего удаляет файл old.txt .