В каждый PHP-документ можно включить дополнительный файл с помощью инструкций:
Инструкции include выдают сообщение типа warning, если не находят файл, инструкции require - фатальную ошибку.
Инструкции include_once и require_once не позволяют включать файл дважды (перед включением файла инструкция проверяет, включался ли он ранее.
Содержимое включаемого файла обрабатывается как простой HTML-текст. Для того, чтобы содержимое этого файла обрабатывалось как PHP-программа, нужно обрамлять его открывающим и закрывающим тегами PHP.
Когда файл включается, его код наследует ту же область видимости переменых, что и строка, на которой произошло включение. Все переменные, доступные на этой строке во включающем файле будут также доступны во включаемом файле. Все функции и классы, объявленные во включаемом файле, будут доступны в глобальной области видимости.
Пример:
Файл1
Файл2
Файл3
Выполняем PHP программу из первого файла. Она включает содержимое 2-х дополнительных файлов. Причём при включении файла 2 выполняется PHP программа, которая в нём находмися. А при включении файла 3 его содержимое будет вставлено как обычный текст.
Результат в окне браузера:
При работе с файлами нужно выделить несколько этапов:
Для работы с файлом его нужно открыть. Команда fopen открывает файл (или url ) и возвращает в программу указатель на файл (file handle).
Если открыть файл не удалось, будет сгенерирована ошибка уровня E_WARNING.
fopen использует два аргумента: имя файла и режим его использования (mode).
Список возможных режимов (mode) для fopen()
mode | Описание |
---|---|
'r' | Открывает файл только для чтения; помещает указатель в начало файла. |
'r+' | Открывает файл для чтения и записи; помещает указатель в начало файла. |
'w' | Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать. |
'w+' | Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать. |
'a' | Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() не применима, записи всегда добавляются. |
'a+' | Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать. В данном режиме функция fseek() влияет только на место чтения, записи всегда добавляются. |
'x' | Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2). |
'x+' | Создаёт и открывает для чтения и записи; в остальном имеет то же поведение что и'x'. |
'c' | Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличие от 'w'), и вызов к этой функции не вызывает ошибку (также как и в случае с 'x'). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (см. flock()) перед изменением, так как использование 'w' может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку). |
'c+' | Открывает файл для чтения и записи; в остальном имеет то же поведение, что и 'c'. |
'e' | Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающихз POSIX.1-2008. |
fclose(file_handle) - закрывает открытый файл.
flock(file_handle, параматр) - позволяет заблокировать или разблокировать файл (параметр принимает значение LOCK_EX или LOCK_UN).
Проверка на наличие файла
Функция file_exists(filename) проверяет наличие указанного файла или каталога.
Возвращает TRUE, если файл или каталог, указанный параметром filename, существует, иначе возвращает FALSE.
Например:
Функция is_readable() определяет существование файла и доступен ли он для чтения.
Возвращает TRUE, если файл существует и доступен для чтения.
Функция is_writable() определяет существование файла и доступен ли он для записи.
Возвращает TRUE, если файл существует и доступен для записи.
Например, если у file1.txt стоит атрибут READONLY , то результат работы этой программы:
Будет:
Файл file1.txt доступен для записи
Файл file2.txt недоступен для записи
На разных платформах есть разные способы обработки пути к файлу. Например, системы UNIX и Linux используют слэши (/) в качестве разделителей в пути к файлу следующим образом:
/www/tmp/test.txt
Windows используют обратные наклонные линии (\) как разделители:
\www\tmp\test.txt
PHP автоматически преобразует обратную косую черту в слэши, поэтому можно безопасно использовать путь к файлу с косой чертой в качестве разделителей.
Чтобы получить имя файла из пути к файлу, можно использовать функцию basename (). Она принимает полный путь к файлу в качестве параметра и возвращает имя файла.
Функция pathinfo принимает параметры: PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME .
Получить размер файла
Для этого примера: первый файл есть на диске, второго нет.
Возвращает размер файла в байтах для первого файла и FALSE (и генерирует ошибку уровня E_WARNING) для вторго файла (такого файла на диске нет) - в случае возникновения ошибки.
PHP предоставляет некоторые полезные функции, которые позволяют получить временные атрибуты файла:
fileatime() возвращает время последнего обращения к файлу
filectime() возвращает время последнего изменения ( last changed) файлаа
filemtime() возвращает время последнего изменения свойств файла (last modified) файла.
Все вышеприведенные функции возвращают временную метку (timestamp) UNIX, которая представляет собой целочисленное значение, которое указывает число секунд между эпохой UNIX (полночь, январь-01-1970) и заданным временем и датой. Чтобы получить информацию о дате и времени из временной метки UNIX, используется функция getdate ().
Например:
stat() — Возвращает подробную информацию о файле
Результаты функций stat() и fstat()
Числовой | Ассоциативный | Описание |
---|---|---|
0 | dev | номер устройства |
1 | ino | номер inode |
2 | mode | режим защиты inode |
3 | nlink | количество ссылок |
4 | uid | userid владельца |
5 | gid | groupid владельца |
6 | rdev | тип устройства, если устройство inode |
7 | size | размер в байтах |
8 | atime | время последнего доступа (временная метка Unix) |
9 | mtime | время последней модификации (временная метка Unix) |
10 | ctime | время последнего изменения inode (временная метка Unix) |
11 | blksize | размер блока ввода-вывода файловой системы |
12 | blocks | количество используемых 512-байтных блоков |
Пример:
Переименование файлов
rename()
Копирование файлов
copy()
Удаление файлов
unlink()
Создание файлов
Функции для работы с папками (folders):
mkdir() - создание папки. Аргументы: имя папки и режим доступа. UNIX - права доступа, восьмеричное число из трех цифр с нулем впереди. Первая цифра - право доступа для владельца, вторая - для группы, третья - для всех остальных. В системе Windows режим доступа игнорируется. В системе UNIX определены следующие права доступа:
0 | Нет доступа |
1 | Доступ для запуска |
2 | Доступ для записи |
3 | Доступ для записи и запуска |
4 | Доступ для чтения |
5 | Доступ для чтения и запуска |
6 | Доступ для чтения и записи |
7 | Полный доступ |
Например, право полного доступа для владельца, чтения и запуска для группы и запуска для всех остальных:
mkdir( "testdir", 0751 );
rmdir() - удаление папки. Аргумент: имя. Удалить можно лишь пустую папку при наличии права на это. При успешном выполнении функция возвращает true.
opendir() - открытие папки. Аргумент: имя папки. Возврвщает ссылку на папку. В случае возникновения ошибки функция возвращает false. Ошибка при открытии может быть вызвана тем, что папка не существует или программа не имеет права его читать.
readdir() - чтение папки. Аргумент: дескриптор каталога (resource), ранее открытый функцией opendir(). Если дескриптор каталога не указан, используется последний дескриптор открытый функцией opendir().. Возвращает строку, содержащую имя следующего по порядку элемента каталога. Элементы возвращаются в том порядке, в котором они хранятся в файловой системе. По достижении конца каталога функция возвращает false.
scandir() - выдаёт список папок и файлов внутри данной
is_dir() - проветить, существут ли папка с таким именем. Аргумент - путь к папке.
Примеры
создать паку
прочесть содержимое папки - readdir()
прочесть содержимое папки - scandir()
fread() - считывает содержимое файла в
fgetc() - считывает одиночный символ из файла
fgets() - считывает одну строку из файла
file() - считывает содержимое всего файла в массив
fgetcsv() - считывает строку значений, разделенных запятыми
file_get_contents() - считывает весь файл в строку
readfile() - отображает содержимое всего файла без необходимости вызова функции fopen ().
fread - чтение файла в двоичном формате, в виде последовательности байт (binary safe mode). использует два параметра: указатель на файл (полученный от fopen ) и количество байт для считывания.
Например:
читает 100 байт из файла "myfile.txt" .
Функции для записи в файл:
fwrite() — запись в файл
fputcsv() — форматирует строку в виде CSV и записывает её в файл
file_put_contents() – пишет строку в файл без вызова фуекции fopen().
Например:
Форматирование ввода-вывода
При операциях чтении-записи можно использовать спецификаторы формата (как и при работе со строками).
fprintf() — записывает отформатированную строку в файл (на file handle)
fscanf() — обрабатывает данные из файла в соответствии с форматом
Примеры
Читать полностью файл
Дозапись в файл
Читать файл построчно - 2 строки
Читать весь файл построчно
Читать файл посимвольно
fprintf() — писать отформатированную строку в файл
file()
file — Читает содержимое файла и помещает его в массив (каждая строка - элемент массива)
file_get_contents()
Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до maxlen байт. В случае неудачи, file_get_contents() вернёт FALSE. Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком.
Таким образом можно прочесть и WEB страничку: