
Тема 5. Работа с файлами
Web-приложения на РНР, работающие с различными данными, в основном используют две возможности для хранения информации: реляционные базы данных и локальную файловую систему.
Система с базой данных более мощная, чем база файлов. Файлы полезны для хранения простых данных, например, информации о настройках или для различных неструктурированных данных.
Данные лучше хранить в файлах, потому что не нужно будет учиться работать с базами данных (это непросто), в большинстве своем провайдеры берут дополнительную плату за доступ к базам данных, в то время как доступ к файлам - бесплатный.
В большинстве случаев при работе с файлами состоит из следующей последовательности действий:
открытие файла,
чтение данных из файла или запись данных в файл,
закрытие файла.
1. Открытие файла
Открытие файлов выполняется с помощью функции fopen().
Синтаксис:
fopen( string filename, string mode [, int use_include_path])
Первый аргумент filename — относительный или абсолютный путь к файлу. Второй аргумент mode задает режим работы с открываемым файлом.
Таблица. Значения аргумент mode.
Аргумент |
Значение аргумента |
r |
Открыть файл только для чтения, поместить указатель в начало файла |
r+ |
Открыть файл для чтения и записи, поместить указатель в начало файла |
w |
Создать новый пустой файл только для записи. Если файл с таким именем уже есть, то вся информация в нем уничтожается |
w+ |
Создать новый пустой файл для чтения и записи. Если файл с таким именем уже есть, то вся информация в нем уничтожается |
a |
Открыть файл для дозаписи, поместить указатель в конец файла. Если файл не существует, делается попытка создать его |
a+ |
Открыть файл для дозаписи и чтения, поместить указатель в конец файла. Если файл не существует, делается попытка создать его |
Можно использовать необязательный третий параметр и установить в него значение «1», если нужно найти файл также и в каталоге use_include_path.
В случае удачного открытия файла функция fopen() возвращает дескриптор файла, в случае неудачи — false.
Дескриптор файла представляет собой указатель на открытый файл, который используется операционной системой для поддержки операций с этим файлом и представляет собой уникальное число. Возвращенный функцией дескриптор файла необходимо затем указывать во всех функциях, которые в дальнейшем будут работать с этим файлом.
При выполнении различных файловых операций дескриптор может перемещаться, отмечая место, с которого можно получить доступ к содержимому файла. Например, если указатель находится в начале файла, то операция записи новых данных в этот файл будет уничтожать содержащиеся в нем старые данные. Если указатель находится в конце файла, то записываемые в него данные будут добавляться к уже имеющимся.
2. Закрытие файла
После того как работа с файлом закончена, его необходимо закрыть. Закрытие файлов выполняется с помощью функции fclose().
Синтаксис:
fclose( int fd)
Аргумент fd представляет собой дескриптор, который необходимо закрыть.
Листинг 5.1. Создание файла data
<html>
<head><title>Создание файла data</title></head>
<body>
<?php
$fd=fopen( "data.txt", "w");
fclose( $fd);
?>
</body>
</html>
После выполнения скрипта в директории, где он расположен, должен появиться файл с именем data.txt.