#8. 1 php Открытие файла: fopen

Возможность использования файлов для хранения данных является значительным преимуществом PHP, и в нем предусмотрен полный набор функций для работы с файлами. Наиболее важные из них описываются в оставшейся части данной главы. Начать их изучение следует с функции fopen, которая открывает заданный файл для чтения или записи. Синтаксис этой функции приведен ниже.

fopen(string filename, string mode [, int use_include_path [, resource zcontext]])

Здесь filename - имя открываемого файла, mode задает режим открытия (для чтения, для записи и др.), параметр use_include_path может быть установлен в значение $1$ или true для поиска файла по каталогам, указанным в параметре include_path конфигурационного файла php.ini. Необязательный параметр zcontext задает контекст файла, который предназначен для дополнительной обработки потоков данных в файл и из файла (в данной книге контексты не рассматриваются).

Параметр mode, определяющий режим открытия и возможные операции с файлом, может принимать следующие значения:

  • r
  • файл открывается только для чтения.

  • r+
  • файл открывается для чтения и для записи.

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

  • w+
  • файл открывается для чтения и записи. Если файл существует, он усекается до нулевой длины. Если файл не существует, он создается.

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

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

  • x
  • файл создается и открывается для записи. Если файл уже существует, функция fopen возвращается значение false, свидетельствующее об ошибке.

  • x+
  • файл создается и открывается для чтения и записи. Если файл уже существует, функция fopen возвращается значение false, свидетельствующее об ошибке.

Следует иметь ввиду, что в различных операционных системах действуют различные соглашения по обозначению конца строки в текстовых файлах. При записи в текстовый файл следует соответствующим образом корректировать символы конца строки в соответствии с той операционной системой, под которой выполняется скрипт. В Unix/Linux концом строки считается символ '\n', в Windows -- '\r\n', в Micintosh -- '\r'. В PHP предусмотрена системная константа PHP_EOL, которая хранит представление конца строки для текущей операционной системы.

При работе в Windows можно использовать флаг текстового режима обработки файла ('t'), который задает преобразование символа '\n' в '\r\n' при записи данных в файл (и, соответственно, выполнение обратного преобразования при чтении). Также можно использовать флаг двоичного режима обработки файла ('b'), при котором данные преобразовываться не будут. Для использования любого из этих флагов его надо просто дописать к строке mode, например, 'wt'. Режим по умолчанию -- текстовый или двоичный -- зависит от используемой версии и модуля PHP, поэтому рекомендуется в любом случае задавать режим в явном виде.

В следующем примере файл /home/file.txt открывается для чтения:

$handle = fopen("/home/file.txt", "r");

При успешном открытии файла функция fopen возвращает дескриптор файла, который используется для дальнейшей работы с файлом. После открытия файла данные могут быть, например, считаны при помощи функции fread, которая описана далее в этой главе.

Следующая строка открывает текстовый файл для записи:

$handle = fopen("/home/file.txt", "wt");

То же самое для двоичного режима работы:

$handle = fopen("/home/file.txt", "wb");

При работе под Windows следует экранировать все обратные слеши, как показано ниже (или использовать прямые слеши):

$handle = fopen("c:\\Wfile.txt", "wb");

При работе с файлами можно не ограничиваться локальной файловой системой. Например, можно открыть файл, находящийся на web-сервере, указав его URL:


$handle = fopen("http://www.orioner.ru/index.html", "r");

Для работы также доступен и FTP-протокол с заданием имени пользователя и пароля:


$handle = fopen("ftp://user:password@ftp.relcom.ru/incoming/file", "w");

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

Key Words for FKN + antitotal forum (CS VSU):