Текстовые файлы в PHP5

Открытие файла

fopen

Открывает файл и привязывает его к дескриптору.

Синтаксис:

int fopen(string $filename, string $mode, bool $use_include_path=false)

Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла.

Если операция «провалилась», то функция возвращает false.

Необязательный параметр use_include_path говорит о том, что, если задано относительное имя

файла, его следует искать также и списке путей, используемом инструкциями include() и require().

Обычно этот параметр не используют.

Параметр $mode может принимать следующие значения:

r

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

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

r+

Файл открывается одновременно на чтение и запись. Указатель текущей позиции устанавливается на ее

первый байт. Если файла не существует, возвращает false. Если в момент записи указатель файла установлен

где-то в середине файла, то данные запишутся прямо поверх уже имеющихся, а не раздвинут их, при

необходимости увеличив размер файла.

w

Создает новый пустой файл. Если на момент вызова уже был файл с таким именем, то он предварительно

уничтожается. В случае неверно заданного имени файла вызов «проваливается».

w+

Аналогичен r+, но если файл изначально не существовало, создает его.

После этого с файлом можно работать как в режиме чтения, так и записи.

Если файл существовал до момента вызова, его содержимое удаляется.

a

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

байт файла. Как водится, вызов не успешен в случае отсутствия файла.

a+

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

при этом содержимое файла не уничтожается. Отличается от a тем, что если файла изначально не

существовало, то он создается. Этот режим полезен, если вам нужно что-то дописать в файл, но вы не

знаете, создан ли уже такой файл.

Но это еще не полное описание параметра $mode. Дело в том, что в конце любой из строк r,w,a,r+,w+ и a+

может находиться еще один необязательный символ — b или t. Если указан b (или не указан вообще никакой),

то файл открывается в режиме бинарного чтения/записи.

Если же это t, то для файла устанавливается режим трансляции символа перевода строки, т.е.

он воспринимается как текстовой.

tmpfile

Создает новый временный файл с уникальным именем и открывает его на чтение и запись.

Синтаксис:

int tmpfile()

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

недоступно.

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

работы программы.

К содержанию

Закрытие файла

fclose

Закрывает файл, открытый предварительно функцией fopen().

Синтаксис:

int fclose(int $fp)

Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось

или же разорвалась связь с удаленным хостом).

В противном случае возвращает значение «истина».

Всегда нужно закрывать FTP- и HTTP-соединения, потому что в противном случае

«беспризорный» файл приведет к неоправданному простою канала и излишней загрузке сервера.

Кроме того, успешно закрыв соединение, вы будете уверены в том, что все данные были

доставлены без ошибок.

К содержанию

Чтение и запись

fread

Читает из открытого файла определенное количество символов.

Синтаксис:

string fread(int $f, int $numbytes)

Читает из файла $f $numbytes символов и возвращает строку этих символов.

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

Если $numbytes больше, чем можно прочитать из файла, возвращается то, что удалось считать.

Этот прием можно использовать, если вам нужно считать в строку файл целиком.

Для этого просто задайте в $numbytes очень большое число.

Но если вы заботитесь об экономии памяти в системе, так поступать не рекомендуется.

fwrite

Запись в файл.

Синтаксис:

int fwrite(int $f, string $str)

Записывает в файл $f все содержимое строки $str. Эта функция составляет пару для fread(), действуя

«в обратном направлении».

При работе с текстовыми файлами (то есть когда указан символ t в режиме открытия файла)

все n автоматически преобразуются в тот разделитель строк, который принят в вашей операционной системе.

fgets

Читает из файла одну строку, заканчивающуюся символом новой строки n.

Синтаксис:

string fgets(int $f, int $length)

Этот символ также считывается и включается в результат.

Если строка в файле занимает больше $length-1 байтов, то возвращаются только ее $length-1 символов.

Функция полезна, если вы открыли файл и хотите «пройтись» по всем ее строкам.

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

Стоит также заметить, что эта функция (как и функция fread()) в случае текстового режима в

Windows заботиться о преобразовании пар rn в один символ n.

fputs

Полный аналог fwrite().

Синтаксис:

int fputs(int $f, string $str)

fgetcsv]

Функция для работы с одним из форматов файлов, в котором может сохранять данные Excel.

Синтаксис:

list fgetcsv(int $f, int $length, char $delim=»,»)

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

Параметр $delim должен обязательно быть строкой из одного символа, в противном случае принимается

во внимание только первый символ этой строки.

Функция возвращает получившийся список или false, если строки кончились.

Параметр $length задает максимальную длину строки точно так же, как это делается в fgets().

Пустые строки в файле не игнорируются, а возвращаются как список из одного элемента — пустой строки.

Пример:

$f=fopen(«file.csv»,»r») or die(«Ошибка»);

for($i=0; $data=fgetcsv($f, 1000, «;»); $i++) {

$num = count($data);

if($num==1 && $data[0]===»») continue;

echo «<h3>Строка номер $i ($num полей):</h3>»;

for($c=0; $c<$num; $c++)

print «[$c]: $data[$c]<br>»;

}

fclose($f);

К содержанию

Указатель текущей позиции

feof

Указатель конца файла.

Синтаксис:

int feof(int $f)

Возвращает true, если достигнут конец файла (то есть если указатель файла установлен за концом файла).

Пример:

$f=fopen(«myfile.txt»,»r»);

while(!feof($f))

{ $str=fgets($f);

// Обрабатываем очередную строку $str

}

fclose($f);

fseek

Устанавливает указатель файла на определенную позицию.

Синтаксис:

int fseek(int $f, int $offset, int $whence=SEEK_SET)

Устанавливает указатель файла на байт со смещением $offset (от начала файла,

от его конца или от текущей позиции, в зависимости от параметра $whence).

Это может и не сработать, если дескриптор $f ассоциирован не с обычным локальным файлом, а с соединением

HTTP или FTP.

Параметр $whence задает с какого места отсчитывается смещение $offset.

В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2:

SEEK_SET

устанавливает позицию начиная с начала файла;

SEEK_CUR

отсчитывает позицию относительно текущей позиции;

SEEK_END

отсчитывает позицию относительно конца файла;

В случае использования последних двух констант параметр $offset вполне может быть отрицательным

(а при применении SEEK_END он будет отрицательным наверняка).

В случае успешного завершения эта функция возвращает 0, а в случае неудачи -1.

ftell

Возвращает положение указателя файла.

Синтаксис:

int ftell(int $f)

К содержанию

Определение типов файлов

file_exists

Проверяет существование вызываемого файла.

Синтаксис:

bool file_exists(string filename)

Возвращает true, если файл с именем filename существует на момент вызова. Следует использовать эту

функцию с осторожностью.

Например, следующий код никуда не годится с точки зрения безопасности:

if(!file_exists($fname))

$f=fopen($fname,»w»);

else

$f=fopen($fname,»r»);

Дело в том, что между вызовом file_exists() и открытием файла в режиме w проходит некоторое время,

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

Данная проблема выходит на передний план при написании сценария счетчика.

Функция не работает с удаленными файлами, файл должен находиться в доступной для

сервера файловой системе.

Результаты функции кэшируются, см. функцию clearstatcache().

filetype

Возвращает тип файла.

Синтаксис:

string filetype(string filename)

Возвращает строку, которая описывает тип файла с именем filename. Если такого файла не существует,

возвращает false.

После вызова строка будет содержать одно из следующих значений:

file — обычный файл;

dir — каталог;

link — символическая ссылка;

fifo — fifo-канал;

block — блочно-ориентированное устройство;

char — символьно-ориентированное устройство;

unknown — неизвестный тип файла;

is_file

Проверка существования обычного файла.

Синтаксис:

bool is_file(string filename)

Возвращает true, если filename — обычный файл.

is_dir

Проверка существования каталога.

Синтаксис:

bool is_dir(string filename)

Возвращает true, если каталог filename существует.

is_link

Проверка существования символической ссылки на файл.

Синтаксис:

bool is_link(string filename)

Возвращает true, если filename — символическая ссылка.

Функция не работает под Windows.

is_readable

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

Синтаксис:

bool is_readable(string filename)

Возвращает true, если файл может быть открыт для чтения.

Обычно PHP осуществляет доступ к файлу с привелегиями пользователя, запускающего web-сервер (часто «nobody»).

Соображения безопасности должны приниматься в расчет.

is_writeable

Проверка существования файла, доступного для записи.

Синтаксис:

bool is_writeable(string filename)

Возвращает true, если в файл можно писать.

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

web-сервер (часто «nobody»). Соображения безопасности должны приниматься в расчет.

is_executable

Проверка существования запускаемого файла.

Синтаксис:

bool is_executable(string filename)

Возвращает true, если файл filename — исполняемый.

is_uploaded_file

Проверка существования файла, загруженного методом HTTP POST.

Синтаксис:

bool is_uploaded_file(string filename)

Возвращает true, если файл с именем filename был загружен на сервер посредством HTTP POST.

Часто это полезно, чтобы убедиться, что пользователи из злого умысла не пытались заставить сценарий

работать с теми файлами, с которыми им работать не следует.

К содержанию

Определение параметров файла

stat

Функция собирает вместе всю информацию, выдаваемую операционной системой для указанного файла, и

возвращает ее в виде массива.

Синтаксис:

array stat(string $filename)

Этот массив всегда содержит следующие элементы с указанными ключами:

0 — устройство;

1 — Номер узла inode;

2 — атрибуты защиты файла;

3 — число синонимов («жестких» ссылок) файла;

4 — идентификатор uid владельца;

5 — идентификатор gid группы;

6 — тип устройства;

7 — размер файла в байтах;

8 — время последнего доступа в секундах, прошедших с 1 января 1970 года;

9 — время последней модификации содержимого файла;

10 — время последнего изменения атрибутов файла;

11 — размер блока;

12 — число занятых блоков;

Этот массив помещает информацию, которая доступна в системах Unix. Под Windows многие поля могут быть пусты.

Если $filename задает не имя файла, а имя символической ссылки, то всетаки будет возвращена информация

о том файле, на который ссылается эта ссылка (а не о ссылке).

fileatime

Возвращает время последнего доступа к файлу.

Синтаксис:

int fileatime(string filename)

Время выражается в количестве секунд, прошедших с 1 января 1970 года (Unix timestamp).

Если файл не обнаружен, возвращает false.

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

Так как это сильно снижает производительность при интенсивной работе с файлами и каталогами, часто

изменение этого атрибута в операционных системах блокируют, и тогда функция бесполезна.

filemtime

Возвращает время последнего изменения файла или false в случае отсутствия файла.

Синтаксис:

int filemtime(string $filename)

filectime

Возвращает время создания файла.

Синтаксис:

int filectime(string $filename)

filesize

Возвращает размер файла в байтах или false, если файла не существует.

Синтаксис:

int filesize(string $filename)

touch

Устанавливает время модификации.

Синтаксис:

int touch(string $filename [, int $timestamp])

Устанавливает время модификации указанного файла $filename равным $timestamp

(в секундах, прошедших с 1 января 1970 года).

Если второй параметр не указан, то подразумевается текущее время. В случае ошибки возвращает false.

Если файл с указанным именем не существует, он создается пустым.

chmod

Страница находится в разработке

К содержанию

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

basename

Выделяет имя файла из пути.

Синтаксис:

string basename(string $path)

Выделяет основное имя из пути $path

Примеры:

echo basename(«/home/somebody/somefile.txt»); // выводит «somefile.txt»

echo basename(«/»); // ничего не выводит

echo basename(«/.»); // выводит «.»

echo basename(«/./»); // также выводит «.»

echo basename(«/home/somebody/somefile.php»,».php»); // выводит «somefile»

Функция basename() не проверяет существование файла. Она просто берет часть строки после самого

правого слеша и возвращает ее.

Эта функция правильно обрабатывает как прямые, так и обратные слеши под Windows.

dirname

Выделяет имя каталога.

Синтаксис:

string dirname(string $path)

Возвращает имя каталога, выделенное из пути $path. Функция довольно «разумна» и умеет выделять

нетривиальные ситуации, которые описаны в примерах:

echo dirname(«/home/file.txt»); // выводит «/home»

echo dirname(«../file.txt»); // выводит «..»

echo dirname(«/file.txt»); // выводит «/» под Unix,

// «» под Windows

echo dirname(«/»); // то же самое

echo dirname(«file.txt»); // выводит «.»

Если функции dirname() передать просто имя файла, она вернет «.», что означает «текущий каталог».

tempnam

Генерирует уникальное имя файла в определенном каталоге.

Синтаксис:

string tempnam(string $dir, string $prefix)

Генерирует имя файла в каталоге $dir с префиксом $prefix в имени, причем так, чтобы созданный

под этим именем в будущем файл был уникален.

Для этого к строке $prefix присоединяется некое случайное число.

Например, вызов tempnam(«/tmp»,»temp») может возвратить /tmp/temp3a6b243c.

Если такое имя нужно создать в текущем каталоге, передайте $dir=».»

realpath

Преобразует относительный путь в абсолютный.

Синтаксис:

string realpath(string $path)

Преобразует относительный путь $path в абсолютный, т.е. начинающийся от корня.

Пример:

echo realpath(«../t.php»); // например, /home/t.php

echo realpath(«.»); // выводит имя текущего каталога

Файл, который указан в параметре $path, должен существовать, иначе функция возвратит false.

rename

(PHP 3, PHP 4, PHP 5)

rename — Переименовывает файл или директорию

Описание

bool rename ( string oldname, string newname [, resource context] )

Пытается переименовать oldname в newname.

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Пример использования функции rename()

<?php

rename(«/tmp/tmp_file.txt», «/home/user/login/docs/my_file.txt»);

?>

Замечание: В версиях PHP ниже 4.3.3, функция rename() не могла переименовать

файлы, находящиеся на другом разделе в ОС, основанных на *nix.

Замечание: Начиная с версии PHP 5.0.0, функция rename() также может быть использована

с некоторыми обвёртками URL.

Замечание: Обвёртка, используемая в oldname ОБЯЗАНА совпадать с обвёрткой, используемой в newname.

Замечание: Атрибут context был добавлен начиная с версии PHP 5.0.0.

К содержанию

Манипулирование целыми файлами

copy

Копирует файл.

Синтаксис:

bool copy(string $src, string $dst)

Копирует файл с именем $src в файл с именем $dst.

При этом, если файл $dst на момент вызова существовал, осуществляется его перезапись.

Функция возвращает true, если копирование прошло успешно, а в случае провала — false.

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

(на другой смонтированной системе в Unix или на другом диске в Windows).

unlink

Удаление файла.

Синтаксис:

bool unlink(string $filename)

Удаляет файл с именем $filename. В случае неудачи возвращает false, иначе — true.

Надо заметить, что файл удаляется только в том случае, если число «жестких» ссылок на него стало равным 0.

Правда, эта схема специфична для Unix-систем.

file

Считывает файл и разбивает его по строкам.

Синтаксис:

list file(string $filename)

Считывает файл с именем $filename целиком и возвращает массив-список, каждый элемент которого

соответствует строке в прочитанном файле.

Неудобство этой функции состоит в том, что символы конца строки (обычно n), не вырезаются из строк файла,

а также не транслируются, как это делается для текстовых файлов.

К содержанию

Прочие функции обработки файлов

ftruncate

Усекает файл.

Синтаксис:

bool ftruncate(int $f, int $newsize)

Эта функция усекает открытый файл $f до размера $newsize. Разумеется, файл должен быть открыт в режиме,

разрешающим запись.

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

ftruncate($f,0);

fflush

Немедленная запись всех изменений в файле.

Синтаксис:

void fflush(int $f)

Заставляет PHP немедленно записать на диск все изменения, которые производились до этого с открытым

файлом $f. Что это за изменения? Дело в том, что для повышения производительности все операции записи

в файл буферизируются: например, вызов fputs($f, «Это строка!») не приводит к непосредственной записи

данных на диск — сначала они попадают во внутренний буфер (обычно размером 8К). Как только буфер

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

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

порциями.

set_file_buffer

Устанавливает размер буфера.

Синтаксис:

int set_file_buffer(int $f, int $size)

Эта функция устанавливает размер буфера, о котором говорилось выше, для указанного открытого файла $f.

Чаще всего она используется так:

set_file_buffer($f,0);

Приведенный код отключает буферизацию для указанного файла, так что теперь все данные,

записываемые в файл, немедленно отправляются на диск или в сеть.

flock

Блокирование файла.

Синтаксис:

bool flock(int $f, int $operation [, int $wouldblock])

Функция устанавливает для указанного открытого дескриптора файла $f режим блокировки,

который бы хотел получить текущий процесс.

Этот режим задается аргументом $operation и может быть одной из следующих констант:

LOCK_SH (или 1) — разделяемая блокировка;

LOCK_EX (или 2) — исключительная блокировка;

LOCK_UN (или 3) — снять блокировку;

LOCK_NB (или 4) — эту константу нужно прибавить к одной из предыдущих, если вы не хотите,

чтобы программа подвисала на flock() в ожидании своей очереди, а сразу возвращала управление.

В случае, если был затребован режим без ожидания, и блокировка не была успешно установлена,

в необязательный параметр-переменную $wouldblock будет записано значение истина true.

В случае ошибки функция возвращает false, а в случае успешного завершения — true

К содержанию

Манипулирование каталогами

mkdir

Создание каталога.

Синтаксис:

bool mkdir(string $name, int $perms)

Создает каталог с именем $name и правами доступа perms.

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

Чаще всего значение $perms устанавливают равным 0770 (предваряющий ноль обязателен —

он указывает PHP на то, что это — восьмеричная константа, а не десятичное число).

Пример:

mkdir(«my_directory»,0755);

// создает подкаталог в текущем каталоге

mkdir(«/data»);

// создает подкаталог data в корневом каталоге

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

rmdir

Удаление каталога.

Синтаксис:

bool rmdir(string $name)

Удаляет каталог с именем $name.

Каталог должен быть пустым, а его атрибуты должны позволять это.

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

chdir

Смена текущего каталога.

Синтаксис:

int chdir(string $directory);

Изменяет текущий PHP каталог на directory. Возвращает FALSE если не может изменить, TRUE если смена

произошла. Параметр $directory может определять и относительный путь, задающийся от текущего каталога.

Примеры:

chdir(«/tmp/data»); // переходим по абсолютному пути

chdir(«./js»); // переходим в подкаталог текущего каталога

chdir(«..»); // переходим в родительский каталог

chdir(«~/data»); // переходим в /home/пользователь/data (для Unix)

getcwd

Полный путь.

Синтаксис:

string getcwd()

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

возвращает полный путь к текущему каталогу, начиная от «корня» (/).

Если такой путь не может быть отслежен, вызов «проваливается» и возвращается false.

diskfreespace

Определяет свободное пространство в каталоге

Синтаксис:

float diskfreespace (string directory);

Данная функция возвращает в байтах свободное пространство в каталоге directory,

то есть в соответствующей ей файловой системе или на разделе диска.

Пример:

$diskspace=diskfreespace(«/»);

// Тем самым мы определили свободное место в корневой директории «/»

К содержанию

Работа с записями

dir

Класс каталога (псевдо-объектно ориентированный механизм).

Синтаксис:

new dir(string directory);

Псевдо-объектно ориентированный механизм для получения списка файлов каталога. Открывает каталог из

directory.

После этого становятся доступны два свойства объекта: дескриптор каталога handle и строка path,

указывающая, какой каталог в настоящий момент используется. Эти свойства доступны, если только каталог

был открыт.

Свойство handle может быть использован вместе с другими функциями работы с каталогом типа

readdir(), rewinddir() и closedir().

Для класса доступны три метода: чтение, возврат к началу и закрытие (read, rewind и close соответственно).

Пример:

$d = dir(«/etc»);

echo «Handle: «.$d->handle.»<br>n»;

echo «Path: «.$d->path.»<br>n»;

while($entry=$d->read()) { // Последовательно выводить

echo $entry.»<br>n»; // имя каждого файла,

} // имеющегося в каталоге

$d->close();

closedir

Закрыть дескриптор(handle) каталога.

Синтаксис:

void closedir(int dir_handle);

Закрывает поток каталога, обозначенный как dir_handle. Поток предварительно должен быть открыт функцией

opendir().

opendir

Открыть дескриптор каталога.

Синтаксис:

int opendir(string path);

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

closedir(), readdir(), и rewinddir().

readdir

Получение имени следующего файла в списке каталога.

Синтаксис:

string readdir(int dir_handle);

Возвращает имя следующего файла из каталога. Имена файлов возвращаются в виде неупорядоченной

последовательности.

Пример:

<?php

$handle=opendir(«.»);

echo «Directory handle: $handlen»;

echo «Files:n»;

while ($file = readdir($handle)) {

echo «$filen»;

}

closedir($handle);

?>

Следует отметить, что функция также возвращает значения «.» и «..».

Если эти значения не требуются, то их можно исключить следующим образом:

<?php

$handle=opendir(«.»);

while($file=readdir($handle)) {

if($file != «.» && $file != «..») {

echo «Имя файла: $file<br>»;

};

};

closedir($handle);

?>

rewinddir

Реинициализация дескриптора каталога.

Синтаксис:

void rewinddir(int dir_handle);

После вызова этой функции функция readdir() с аргументом dir_handle будет возвращать имена файлов с

начала в списке каталога.

Если вы нашли ошибку, выделите ее и нажмите Shift + Enter или нажмите здесь чтобы сообщить нам.

Author: vova

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *