Функция fopen() в PHP

Определение и использование

Функция fopen() открывает файл или URL.

Если открытие失败ает, функция возвращает FALSE.

Синтаксис

fopen(filename,mode,include_path,context)
Параметры Описание
filename Обязателен. Определяет файл или URL, который нужно открыть.
mode Обязателен. Определяет тип доступа к файлу/потоку. Возможные значения см. в таблице.
include_path Опционально. Если также необходимо искать файлы в include_path, можно установить этот параметр в 1 или TRUE.
context Опционально. Определяет окружение файла. Контекст — это набор опций, которые могут изменить поведение потока.

Возможные значения параметра mode

mode объяснение
"r" Открыть файл в режиме только чтения, переместить указатель файла в начало файла.
"r+" Открыть файл в режиме чтения/записи, переместить указатель файла в начало файла.
"w" Открыть файл в режиме записи, переместить указатель файла в начало файла и уменьшить размер файла до нуля. Если файл не существует, попытаться создать его.
"w+" Открыть файл в режиме чтения/записи, переместить указатель файла в начало файла и уменьшить размер файла до нуля. Если файл не существует, попытаться создать его.
"a" Открыть файл в режиме записи, переместить указатель файла в конец файла. Если файл не существует, попытаться создать его.
"a+" Открыть файл в режиме чтения/записи, переместить указатель файла в конец файла. Если файл не существует, попытаться создать его.
"x"

Создать и открыть файл в режиме записи, переместить указатель файла в начало файла. Если файл уже существует, вызов fopen() не удастся и вернёт FALSE, а также генерирует ошибку уровня E_WARNING.

это эквивалентно указанию O_EXCL|O_CREAT для системного вызова open(2).

эта опция поддерживается PHP 4.3.2 и более поздними версиями и может использоваться только для локальных файлов.

"x+"

создается и открывается в режиме чтения-записи, и указатель файла устанавливается в начало файла. Если файл уже существует, вызов fopen()失败 и возвращает FALSE, и генерируется сообщение об ошибке уровня E_WARNING. Если файл не существует, он будет создан.

это эквивалентно указанию O_EXCL|O_CREAT для системного вызова open(2).

эта опция поддерживается PHP 4.3.2 и более поздними версиями и может использоваться только для локальных файлов.

объяснение

fopen() будет filename определяемого имени ресурса привязывается к потоку. Если filename является "scheme://...если используется формат "", то он рассматривается как URL, PHP ищет процессор протокола (также известный как封装ный протокол) для обработки этого режима. Если протокол не зарегистрирован в качестве封装ного протокола, PHP выдает сообщение для помощи в проверке потенциальных проблем в скрипте и filename продолжать выполнять как обычное имя файла.

если PHP считает filename определяется как локальный файл, будет попытка открыть поток на этом файле. Файл должен быть доступен PHP, поэтому необходимо подтвердить, что разрешения доступа к файлу позволяют это. Если активирован безопасный режим или open_basedir, будут применены дополнительные ограничения.

если PHP считает filename определяется как зарегистрированный протокол, и этот протокол зарегистрирован в качестве сетевого URL, PHP проверяет и подтверждает, что allow_url_fopen был активирован. Если он отключен, PHP выдает предупреждение, и вызов fopen失败.

для context поддержка была добавлена в PHP 5.0.0.

Подсказки и комментарии

Комментарий:У различных семейств операционных систем свои привычки завершения строк. При записи текстового файла и желании вставить новую строку, необходимо использовать символ завершения строки, соответствующий операционной системе. Системы, основанные на Unix, используют \n в качестве символа завершения строки, системы, основанные на Windows, используют \r\n в качестве символа завершения строки, а системы, основанные на Macintosh, используют \r в качестве символа завершения строки. Если при записи файла используется неправильный символ завершения строки, то другие приложения могут открывать эти файлы очень странно.

В Windows предоставлен текстовый преобразователь метки ("t"), который может прозрачно преобразовывать \n в \r\n. В качестве альтернативы можно использовать "b", чтобы принудительно использовать двоичный режим, и данные не будут преобразовываться. Для использования этих меток можно использовать "b" или "t" в качестве последнего символа параметра mode.

Default conversion mode depends on SAPI and the version of PHP used, so for portability it is encouraged to always specify the appropriate marker. If you are working with plain text files and use \n as a line terminator in the script, but still expect these files to be read by other applications such as Notepad, then use "t" in the mode. In all other cases use "b".

Если при работе с двоичными файлами не указан "b"маркер, могут возникнуть странные проблемы, включая испорченные изображения и странные проблемы с символами \r\n.

Комментарий:Для портативности рекомендуется всегда использовать "b"маркер при открытии файла fopen().

Комментарий:Еще раз, для портативности рекомендуется переписать код, который зависит от "t"模式的 кода, чтобы использовать правильные символы завершения строки и изменить его на "b"mode.

Пример

<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:password@example.com/test.txt","w");
?>