fopen
(PHP 3, PHP4, PHP 5)fopen -- Открывает файл или URL
- fopen() закрепляет именованый ресурс, указанный в аргументе filename, за потоком. Если filename передан в форме "scheme://...", он считается URL'ом и PHP проведёт поиск обработчика протокола (также известного как "обвёртка") для этой схемы. Если ни одна обвёртка не закреплена за протоколом, PHP выдаст замечание чтобы помочь вам отследить потенциальную проблему в вашем скрипте и продолжит выполнение, будто filename указывает на обыкновенный файл.
- Если PHP решил, что filename указывает на локальный файл, тогда он попытается открыть поток к этому файлу. Файл должен быть доступен PHP, так что вам следует убедиться, что права доступа на файл разрешают это. Если вы вкдючили безопасный режим или open_basedir, накладываются дальнейшие ограничения.
- Если PHP решил, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP проверит состояние директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.
Замечание: Список поддерживаемых протоколов доступен в разделе Прил. M. Некоторые протоколы (обвёртки) поддерживают context и/или опции php.ini. Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется обвёрткой http). Для получения описания параметров contexts и zcontext, обратитесь к разделу Ссылка CXXXII, Stream Functions.
Замечание: Поддержка контекста была добавлена
в PHP 5.0.0.
Замечание: Начиная с версии PHP4.3.2, бинарный режим является режимом по умолчанию для всех платформ, которые различают бинарный и текстовый, режимы. Если у вас возникли проблемы после обновления, попробуйте использовать флаг 't' в качестве обходного пути до тех пор, пока вы не измените свои скрипты для достижения большей портируемости, как отмечено выше.
- Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих:
Таблица 1. Список возможных режимов для fopen() используя mode
mode | Описание |
---|---|
'r' | - Открывает файл только для чтения; помещает указатель в начало файла. |
'r+' | - Окрывает файл для чтения и записи; помещяет указатель в начало файла. |
'w' | - Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать. |
'w+' | - Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать. |
'a' | - Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать. |
'a+' | - Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать. |
'x' | - Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2). Эта опция поддерживается начиная с версии PHP4.3.2 и выше, и работает только для локальных файлов. |
'x+' | - Создаёт и открывает для чтения и записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2). Эта опция поддерживается начиная с версии PHP4.3.2 и выше, и работает только для локальных файлов. |
Замечание: Разные семейства операционных систем имеют разные соглашения относительно окончанийя строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильный(-ые) символ(ы) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh используют \r в качестве символа конца строки.
- Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы "смешно выглядят".
- Windows предлагает флаг режима текстовой трансляции ('t'), который автоматически переведёт \n во время работы с файлом. И наоборот - также вы можете использовать 'b' чтобы принудительно включить бинарный (двоичный) режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите 'b' или 't' в качестве последней буквы параметра mode.
- Так как установка флага трансляции по умолчанию зависит от SAPI и версии PHP, которую вы используете, рекоммендуем явно задавать указанный флаг из соображений портируемости. Вы должны использовать режим 't' если вы работаете с текстовым файлом и использовать \n для разделения для обозначения конца строки в вашем скрипте, при этом не беспокоясь за читаемость ваших файлов в других приложениях типа "Блокнота". В противном случае вам следует использовать флаг 'b'.
- Если вы явно не укажете флаг 'b' во время работы с бинарными файлами, вы можете столкнуться со странной порчей ваших данных, включая испорченные файлы изображений и странные проблемы с символами \r\n.
Замечание: Из соображений портируемости, настоятельно рекоммендуется всегда использовать флаг 'b' при открытии файлов с помощью fopen().
Замечание: Кроме того, из соображений портируемости, также настойчиво рекоммендуется переписать старый код, который полагается на режим 't', чтобы вместо этого он использовал правильные окончания строк и режим 'b'.
- Необязательный третий параметр use_include_path может быть установлен в '1' или TRUE, если вы также хотите провести поиск файла в include_path.
- Если открыть файл не удалось, функция вернёт FALSE и сгенерирует ошибку уровня E_WARNING. Вы можете использовать @ для того, чтобы подавить это предупреждение.
- Если вы сталкиваетесь с проблемами во время чтения или записи файлов, и вы используете PHP в виде серверного модуля, убедитесь в том, что процесс сервера имеет доступ к файлам и директориям, которые вы используете.
- На платформе Windows, вам необходимо не забывать экранировать все обратные слеши в пути к файлу или использовать прямые слеши.
|
Внимание |
При использовании SSL,
Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как о "SSL: Fatal Protocol Error" в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS и не выводит предупреждение. Если вы используете fsockopen() для создания ssl://сокета, вы сами отвечаете за определение и подавление этого предупреждения. |
Замечание: Когда опция safe mode включена, PHP проверяет,
имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца),
как и выполняемый скрипт.
- См. также раздел Прил. M, описание функций fclose(), fgets(), fread(), fwrite(), fsockopen(), file(), file_exists(), is_readable(), stream_set_timeout() и popen().
fnmatch
fpassthru 22222