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, необходимо экранировать все обратные слеши в пути к файлу или использовать прямые слеши.
$handle = fopen ( «c:\\folder\\resource.txt» , «r» );
?>?php
Параметр 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
Необязательный третий параметр use_include_path может быть установлен в ‘1’ или true , если вы также хотите провести поиск файла в include_path.
Allow url fopen что это
Поведение этих функций зависит от установок в php.ini .
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| allow_url_fopen | «1» | PHP_INI_SYSTEM | |
| allow_url_include | «0» | PHP_INI_SYSTEM | Объявлена устаревшей с версии PHP 7.4.0. |
| user_agent | NULL | PHP_INI_ALL | |
| default_socket_timeout | «60» | PHP_INI_ALL | |
| from | «» | PHP_INI_ALL | |
| auto_detect_line_endings | «0» | PHP_INI_ALL | Объявлена устаревшей с версии PHP 8.1.0. |
| sys_temp_dir | «» | PHP_INI_SYSTEM |
Краткое разъяснение конфигурационных директив.
Данная директива включает поддержку обёрток URL (URL wrappers), которые позволяют работать с объектами URL как с обычными файлами. Обёртки, доступные по умолчанию, служат для работы с удалёнными файлами с использованием ftp или http протокола. Некоторые модули, например, zlib, могут регистрировать собственные обёртки.
Эта опция позволяет использование обёрток fopen, которые поддерживают работу с URL, в функциях include , include_once , require , require_once .
Замечание:
Эта опция требует включения опции allow_url_fopen.
user_agent string
Устанавливает отсылаемую PHP строку «User-Agent».
Значение времени ожидания по умолчанию (в секундах) для потоков, использующих сокеты. Отрицательное значения означает бесконечное время ожидания.
Адрес email, используемый в соединениях FTP без авторизации, а также в качестве значения заголовка From в HTTP соединениях при использовании ftp и http обёрток, соответственно.
Когда данная директива включена, PHP проверяет данные, получаемые функциями fgets() и file() с тем, чтобы определить способ завершения строк (Unix, MS-Dos или Macintosh).
Данная директива позволяет PHP взаимодействовать с системами Macintosh, однако, по умолчанию эта директива выключена, поскольку при её использовании возникает (несущественная) потребность в дополнительных ресурсах для определения символа окончания первой строки, а также потому, что программисты, использующие в системах Unix символы возврата каретки в качестве разделителей, столкнутся с обратно-несовместимым поведением PHP.
allow_url_fopen на виртуальном хостинге: добро или зло?
Приветствую всех!
Держу сайты на двух разных виртуальных хостингах (не VPS, а shared hosting). Сайты на лёгких CMS с открытым кодом. Когда количество сайтов превысило количество пальцев, решил сделать так, чтобы сайты сами апдейтились. Для автоапдейта необходимы опции: cURL включён, safe_mode выключен, open_basedir выключен, allow_url_fopen включён. И столкнулся с тем, что один хостер «из соображений безопасности» не даёт включить в моём php.ini опцию allow_url_fopen. Другой хостер даёт и автоапдейт работает. На вопрос отвечает, конечно же: наплюй и неси все сайты ко мне – у нас всё чётко.
Не знаю, кому из них верить (в рнр настолько не разбираюсь). Более того, предполагаю околорелигиозную тематику. Поэтому: прошу вашего мнения. И, пожалуйста, не холиварьте;)
ап> суть вопроса: включённый allow_url_fopen это дыра или нет, если да, как эффективно закрывается и почему первый хостер предпочитает не позволять, чем закрывать дыру.
Как включить allow_url_fopen в конфигурации PHP?
В конфигурации PHP joomla 1.7 параметр allow_url_fopen отключен. Для использования функций обновления необходимо включить allow_url_fopen. как это сделать?
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
задан 16 фев 2012 в 9:39
Роман Соколов Роман Соколов
629 3 3 золотых знака 20 20 серебряных знаков 49 49 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Поправить умолчания php.ini через хостера. По тематике — сюда
Отслеживать
ответ дан 16 фев 2012 в 10:18
Mykhas Kobernyk Mykhas Kobernyk
106 2 2 серебряных знака 13 13 бронзовых знаков
- joomla
- php
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.