fopen
fopen() закрепляет именованный ресурс, указанный в аргументе filename , за потоком.
Список параметров
Если filename передан в форме «scheme://. «, он считается URL’ом и PHP проведёт поиск обработчика протокола (также известного как «обертка») для этой схемы. Если ни одна обёртка не закреплена за протоколом, PHP выдаст замечание, чтобы помочь вам отследить потенциальную проблему в вашем скрипте и затем продолжит выполнение, как если бы filename указывал на обыкновенный файл.
Если PHP установлено, что filename указывает на локальный файл, тогда выполняется попытка открыть поток к этому файлу. Файл должен быть доступен PHP, так что вам следует убедиться, что права доступа на файл это разрешают. Если вы включили open_basedir, то накладываются дальнейшие ограничения.
Если PHP установил, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP выполняет проверку состояния директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.
Замечание:
Список поддерживаемых протоколов доступен в разделе Поддерживаемые протоколы и обертки. Некоторые протоколы ( обертки ) поддерживают контекст и/или опции php.ini . Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется оберткой http ).
На платформе Windows, необходимо экранировать все обратные слеши в пути к файлу или использовать прямые слеши.
Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих вариантов:
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. |
Замечание:
Разные семейства операционных систем имеют разные соглашения относительно окончания строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильные символы (или символ) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh (Mac OS Classic) используют \r в качестве символа конца строки.
Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы «странно выглядят».
Windows предлагает флаг режима текстовой трансляции ( ‘t’ ), который автоматически переведёт \n в \r\n во время работы с файлом. И наоборот — вы также можете использовать ‘b’ , чтобы принудительно включить бинарный режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите ‘b’ или ‘t’ последней буквой параметра mode .
Флагом трансляции по умолчанию является ‘b’ . Вы можете использовать режим ‘t’ , если работаете с текстовыми файлами и используете \n для обозначения конца строки в вашем скрипте, но при этом предполагаете, что ваши файлы будут использоваться в таких приложениях, как «Блокнот» (в устаревших версиях). Во всех остальных случаях используйте флаг ‘b’ .
Если вы укажете флаг ‘t’ во время работы с бинарными файлами, вы можете столкнуться со странными проблемами с вашими данными, включая поврежденные файлы изображений и проблемы с символами \r\n .
Замечание:
Опять же из соображений портируемости крайне рекомендуется переписать старый код, который полагается на режим ‘t’ , чтобы вместо этого он использовал правильные концы строк и режим ‘b’ .
Необязательный третий параметр use_include_path может быть установлен в ‘1’ или true , если вы также хотите провести поиск файла в include_path.
Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.
Возвращаемые значения
Возвращает указатель на файл в случае успешной работы, или false в случае возникновения ошибки
fopen
fopen() закрепляет именованный ресурс, указанный в аргументе filename , за потоком.
Список параметров
Если filename передан в форме «scheme://. «, он считается URL и PHP проведёт поиск обработчика протокола (также известного как «обёртка») для этой схемы. Если ни одна обёртка не закреплена за протоколом, PHP выдаст замечание, чтобы помочь вам отследить потенциальную проблему в вашем скрипте и затем продолжит выполнение, как если бы filename указывал на обыкновенный файл.
Если PHP установлено, что filename указывает на локальный файл, тогда выполняется попытка открыть поток к этому файлу. Файл должен быть доступен PHP, так что вам следует убедиться, что права доступа на файл это разрешают. Если вы включили open_basedir, то накладываются дальнейшие ограничения.
Если PHP установил, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP выполняет проверку состояния директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.
Замечание:
Список поддерживаемых протоколов доступен в разделе Поддерживаемые протоколы и обёртки. Некоторые протоколы ( обёртки ) поддерживают контекст и/или опции php.ini . Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется обёрткой http ).
На платформе Windows, необходимо экранировать все обратные слеши в пути к файлу или использовать прямые слеши.
Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих вариантов:
mode | Описание |
---|---|
‘r’ | Открывает файл только для чтения; помещает указатель в начало файла. |
‘r+’ | Открывает файл для чтения и записи; помещает указатель в начало файла. |
‘w’ | Открывает файл только для записи; в противном случае ведёт себя так же, как и ‘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. |
Замечание:
Разные семейства операционных систем имеют разные соглашения относительно окончания строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильные символы (или символ) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh (Mac OS Classic) используют \r в качестве символа конца строки.
Если вы используете неверный символ конца строки при редактировании файлов, вы можете обнаружить, что при открытии эти файлы «странно выглядят».
Windows предлагает флаг режима текстовой трансляции ( ‘t’ ), который автоматически переведёт \n в \r\n во время работы с файлом. И наоборот — вы также можете использовать ‘b’ , чтобы принудительно включить бинарный режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите ‘b’ или ‘t’ последней буквой параметра mode .
Флагом трансляции по умолчанию является ‘b’ . Вы можете использовать режим ‘t’ , если работаете с текстовыми файлами и используете \n для обозначения конца строки в вашем скрипте, но при этом предполагаете, что ваши файлы будут использоваться в таких приложениях, как «Блокнот» (в устаревших версиях). Во всех остальных случаях используйте флаг ‘b’ .
Если вы укажете флаг ‘t’ во время работы с бинарными файлами, вы можете столкнуться со странными проблемами с вашими данными, включая повреждённые файлы изображений и проблемы с символами \r\n .
Замечание:
Опять же из соображений портируемости крайне рекомендуется переписать старый код, который полагается на режим ‘t’ , чтобы вместо этого он использовал правильные концы строк и режим ‘b’ .
Замечание: Параметр mode игнорируется при работе с обёртками потока php://output , php://input , php://stdin , php://stdout , php://stderr и php://fd .
Необязательный третий параметр use_include_path может быть установлен в ‘1’ или true , если вы также хотите провести поиск файла в include_path.