Все ленты — последние статьи

Работаем с файлами на PHP

В настоящее время существует огромное количество средств для создания по
истине интерактивных веб приложений. Среди наиболее популярных стоит отметить asp, perl и php. Эти средства прочно вошли в жизнь веб-разработчика. На данный моментсамым быстро развивающимся является язык php. Поэтому рассмотрим его возможности более подробно.

php является внедряемым языком сценариев. Многое из его синтаксиса
заимствовано из c, java и perl с некоторыми, заложенными в него, уникальными
особенностями. Цель языка состоит в том, чтобы позволить веб-разработчикам быстро создавать динамически генерируемые страницы.

Развитие Сети диктует свои требования по предоставлению пользователю
интересующей его информации. Сайт — это не только набор веб-страничек. Это еще и средство для хранения информации, организации обработки запросов пользователя и создания адекватного ответа на пользовательский запрос.

 

Хранить информацию на сервере можно несколькими способами. Первый — с
использованием баз данных. Очень удобный способ хранения больших объемов
информации, когда необходимо организовывать выборки, сортировать информацию по различным параметрам и т. д. Если же необходимо обработать небольшой объем
информации, да еще и без каких–то ухищрений (например, организовать учет
посещений), то подойдет второй способ — размещение информации в файлах.

php предоставляет очень большой набор средств по работе с файлами и файловой
системой. Рассмотрим подробнее некоторые функции для работы с файлами.

Естественно, для начала работы с файлом его надо открыть. Для этого
предназначена функция fopen(). Эту функцию можно использовать для открытия любого файла в файловой системе сервера через http или ftp:

int fopen(string filename, string mode);

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

Значение Описание a Открыть файл только для дополнений. Данные дописываются в
конец файла. a+ Открыть файл для дополнения и чтения. Данные дописываются в конец файла. r Открыть файл только для чтения.

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

При работе с двоичным файлом, необходимо указать флаг b. Однако, если между
двоичными и текстовыми файлами не делается различия (как в системе unix), то этот
флаг игнорируется.

При успешном выполнении функция fopen() возвращает дескриптор файла, который
представляет собой целое число. Этот дескриптор предназначен для ссылок на файл
при последующих вызовах функций работы с файлами. При неудаче возвращается false.
Пример:

$file_hendel = fopen("report", "a");if (!$file_hendle) { echo("Невозможно
открыть файл…"); }else { // функции работы с файлами; }

По завершении работы с файлом необходимо его закрыть:

int fclose(int fp)

В качестве аргумента, функция fclose() принимает дескриптор закрываемого
файла. В случае успеха возвращается true, в случае неудачи — false.

Просто так файлы открывать бессмысленно. С ними надо что–то делать. Первое,
что приходит на ум — вывести содержимое файла на экран. Эту операцию осуществляет
функция fpassthru():

int fpassthru (int fp);

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

Может не возникнуть необходимости выводить весь файл. Возможно, нам
понадобится прочесть только часть данных, для использования их на нашей странице. Для этой цели в Рhp есть несколько функций.

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

string fread(int fp, int length);

Функция читает строку длиной length символов из файла с дескриптором fp.
Пример:

$file_hendel=fopen("text.txt", "r"); if (!$file_hendle) { echo("Невозможно
открыть файл…"); } else { $text = fread($file_hendel, 5); //Считывается первые 5
символов fclose($file_hendel); }

Если конец файла достигнут раньше длины length, то возвращается весь
прочитанный текст.

Так же для чтения данных из файла применяются функции fgetc(), fgets() и
fgetss()

string fgets(int fp, int length); string fgetss(int fp, int length);

Функция fgetc() производит считывание одного символа.

Функция fgets() возвращает строку из (length–1) символов. Чтение завершается,
если будет достигнут символ перевода строки или конец файла.

Функция fgetss() идентична fgets(), но все теги html удаляются из строки, но
учитываются в длине строки length.

При ошибке эти функции возвращают false.

Также, для чтения содержимого файла можно использовать функцию file(),
возвращающую содержимое файла в виде массива. Каждая строка файла представляется в виде элемента массива:

array file(string filename);

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

Для записи в файл используются функции fputs() и fwtite().

int fputs(int fp, string string, [int length]); int fwrite(int fp, string
string, [int length]);

Если последний параметр не указан, то осуществляется запись всей строки.
Пример (учет посещений с занесением данных о дате посещения и ip посетителя в файл
и вывода на экран сообщения о номере посещения):

<?php

//Учет посещений // количество посетителей будем хранить в файле report
$date=date("d m y, h:i:s"); $ip=getenv("remote_addr"); // опредляем ip узла $host
= gethostbyaddr($ip); // определяем имя узла по его ip $str=( // формируем строку,
date — $date // для размещения ее в файле host — $host // учета ip — $ip
–––––––––––––––––––––"); $file_hendle = fopen("report", "a+"); //открываем файл
report для добавлений, fputs($file_hendle,$str); // записываем в него
подготовленную строку и fclose($file_hendle); // закрываем файл

// Определние и вывод порядкового номера посетителя // количество посетителей
будем хранить в файле visitors

// открываем файл visitors для перезаписи $file_hendle = fopen("visitors",
"w+"); $visitor_number = fread($file_hendle, filesize("visitors"));
$visitor_numbe++; // прибавляем еще одного посетителя, rewind($file_hendle);
fwrite($file_hendle,$visitor_numbe); // переписываем файл visitors и
fclose($file_hendle); // закрываем файл echo ("Поздравляем, вы $visitor_numbe
посетитель!");

?>

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

Функция rewind() устанавливает текущую позицию в начало файла, дескриптор
которого она принимает в качестве аргумента.

Может возникнуть необходимость определить текущее положение в файле. Для этой
цели служит функция ftell()

int ftell(int fp);

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

int fseek(int fp, int offset [, int whence]);

Основными аргументами функции являются дескриптор файла и значение заданной
позиции от начала файла. Например, с помощь функции ftell() можно организовать
перемещение в заданную позицию:

fseek($fp, ftell($fp)+10); // переход на 10 позиций вперед от текущей

Но этого же эффекта в php4 можно добиться без использования функции ftell(),
так как в функции fseek() появился необязательный аргумент, который определяет
способ перемещения на заданную позицию: seek_set — отсчитывает значение от начала
файла (по умолчанию); seek_cur — отсчитывает значение от текущей позиции; seek_end
– прибавляет значение offset к концу файла.

Тот же пример в php4 примет вид:

fseek($fp, 10, seek_cur);

Часто возникают ситуации, когда надо проверить положение указателя
относительно конца файла. Для этого применяется функция feof(), которая возвращает
true, если достигнут конец файла и false, если конец файла не достигнут.

Возможности php по работе с файлами не ограничиваются приведенными здесь
функциями. С полным описанием функций для работы с файловой системой можно
ознакомится на официальном сайте php в разделе php: manual: filesystem functions.