Открытие файла
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 будет возвращать имена файлов с
начала в списке каталога.
If you found an error, highlight it and press Shift + Enter or click here to inform us.