Allow url fopen что это
Перейти к содержимому

Allow url fopen что это

  • автор:

Работа с удаленными файлами

В случае, если опция allow_url_fopen включена в конфигурационном файле php.ini , вы можете использовать HTTP и FTP ссылки в большинстве функций, принимающих в качестве параметра имя файла. Также вы можете использовать ссылки в операторах include() , include_once() , require() и require_once() (начиная с версии PHP 5.2.0 для корректной работы этих функций должна быть включена опция allow_url_include ). Дополнительную информацию о поддерживаемых в PHP протоколах вы можете найти в Supported Protocols and Wrappers.

Замечание:

В 4.0.3 и более ранних версиях при сборке необходимо использовать опцию —enable-url-fopen-wrapper для активации возможности работать с удаленными файлами.

Замечание:

Дистрибутивы PHP для Windows-платформ до версии 4.3 не поддерживают возможности работы с удаленными файлами для следующих операторов: include() , include_once() , require() , require_once() , и функций вида imagecreatefromXXX в расширении GD and Image Функции.

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

Пример #2 Получение заголовка удаленной страницы

$file = fopen ( «http://www.example.com/» , «r» );
if (! $file ) echo «

Unable to open remote file.\n» ;
exit;
>
while (! feof ( $file )) $line = fgets ( $file , 1024 );
/* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */
if ( preg_match ( «@\(.*)\@i» , $line , $out )) $title = $out [ 1 ];
break;
>
>
fclose ( $file );
?>

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

Для того, что бы авторизироваться под пользователем, отличным от ‘anonymous’, вам необходимо указать логин (и, возможно, пароль) в адресной строке, например так: ‘ftp://user:password@ftp.example.com/path/to/file‘. (Вы можете использовать этот же синтаксис для доступа к удаленным файлам по HTTP -протоколу, если необходима Basic-авторизация.)

Пример #3 Сохранение данных на удаленном сервере

$file = fopen ( «ftp://ftp.example.com/incoming/outputfile» , «w» );
if (! $file ) echo «

Unable to open remote file for writing.\n» ;
exit;
>
/* Запись данных. */
fwrite ( $file , $_SERVER [ ‘HTTP_USER_AGENT’ ] . «\n» );
fclose ( $file );
?>

Замечание:

Глядя на приведенный выше пример, у вас может возникнуть идея использовать эту технику для ведения удаленного лог-файла. К сожалению, это нереализуемо, поскольку попытка записи в уже существующий удаленный файл при помощи функции fopen() приведет к ошибке. В реализации распределенного логирования, возможно, вам поможет функция syslog() .

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 на VMBitrix

Что нужно сделать, для именения значения директивы allow_url_fopen = Off на allow_url_fopen = On на VMBitrix, которая собрана на CentOS:

  1. Зайти на сервер SFTP клиентом или по SSH c root правами
  2. Открыть конфигурационный файл /etc/php.d/bitrixenv.ini
  3. Найти allow_url_fopen и изменить значение на On
  4. Перезагрузить Apache. В командной строке выполните service httpd restart
  5. Проверить, что директива изменила значение можно в /bitrix/admin/phpinfo.php

allow_url_fopen на виртуальном хостинге: добро или зло?

Приветствую всех!
Держу сайты на двух разных виртуальных хостингах (не VPS, а shared hosting). Сайты на лёгких CMS с открытым кодом. Когда количество сайтов превысило количество пальцев, решил сделать так, чтобы сайты сами апдейтились. Для автоапдейта необходимы опции: cURL включён, safe_mode выключен, open_basedir выключен, allow_url_fopen включён. И столкнулся с тем, что один хостер «из соображений безопасности» не даёт включить в моём php.ini опцию allow_url_fopen. Другой хостер даёт и автоапдейт работает. На вопрос отвечает, конечно же: наплюй и неси все сайты ко мне – у нас всё чётко.
Не знаю, кому из них верить (в рнр настолько не разбираюсь). Более того, предполагаю околорелигиозную тематику. Поэтому: прошу вашего мнения. И, пожалуйста, не холиварьте;)
ап> суть вопроса: включённый allow_url_fopen это дыра или нет, если да, как эффективно закрывается и почему первый хостер предпочитает не позволять, чем закрывать дыру.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *