Как решить PHP cURL Предупреждение: curl_set_opt_array (): CURLOPT_FOLLOWLOCATION не может быть активирован, когда установлен open_basedir

завивать это библиотека, которая позволяет вам делать HTTP-запросы в PHP. Команда curl_exec в PHP — это мост для использования curl из консоли. curl_exec позволяет легко и быстро выполнять запросы GET / POST, получать ответы от других серверов, таких как JSON, и загружать файлы.

В некоторых средах разработки выполнение следующего кода приведет к отказу из-за использования CURLOPT_FOLLOWLOCATION:

В этой статье вы узнаете, почему это происходит и как это решить.

Почему это происходит

Эта ошибка происходит, когда ваша конфигурация PHP запретить вам следить за местоположением.

Спасибо капитану очевидное

Возможные решения

Как и в любой среде и случаях, не все перечисленные варианты будут работать для вас:

1. Установите для CURLOPT_FOLLOWLOCATION значение false

CURLOPT_FOLLOWLOCATION опция указывает, должен ли cURL следовать за HTTP 3xx перенаправляет или нет. Когда вы запрашиваете URL, иногда вы можете быть перенаправлены на другой URL, например, в PHP вы можете перенаправить, используя:

header('Location: http://example.com/');

По умолчанию этот параметр отключен, и обычно нет веских причин для его отключения, однако, если вы знаете, что делаете, и уверены, что ваш запрос никогда не будет перенаправлен, то вы можете просто отключить этот параметр:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);

2. Отключить безопасный режим PHP

Безопасный режим - это попытка решить некоторые проблемы, возникающие при работе веб-сервера с поддержкой PHP в среде общего хостинга. Однако дополнительные проверки безопасности, налагаемые безопасным режимом, выполняются на уровне PHP, поскольку базовой архитектуры безопасности веб-сервера и операционной системы обычно недостаточно для наложения необходимых ограничений безопасности для многопользовательской среды, в которой многие пользователи могут быть в состоянии загрузить и выполнить код PHP.

Включение безопасного режима накладывает несколько ограничений на сценарии PHP, эти ограничения в основном касаются доступа к файлам, доступа к переменным среды и управления выполнением внешних процессов. Эти ограничения влияют на cURL, когда включены опции FOLLOWLOCATION, поэтому, если вы не можете отключить эту опцию в cURL, для того, чтобы ваш скрипт работал, вам нужно отключить безопасный режим, изменив свой php.ini файл.

Используйте любой код или текстовый редактор и редактируйте свой php.ini файл и поиск safe_mode вариант и установить Off как значение, как это, вероятно, уже с On,

Отключить безопасный режим PHP

Перезапустите apache и попробуйте снова выполнить ваш скрипт. Или, если вы не можете изменить php.ini файл в вашей среде, вы можете попробовать установить это свойство динамически с PHP в вашем скрипте, используя:

ini_set('safe_mode', false);

Хотя второй способ вряд ли подойдет большинству разработчиков, стоит попробовать.

3. Установите для open_basedir значение none

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

Чтобы отключить open_basedir вариант, нам просто нужно прокомментировать это в файле php.ini. Откройте код или текстовый редактор и отредактируйте файл php.ini, найдите опцию open_basedir и прокомментируйте, добавив к нему префикс ;:

; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; http://php.net/open-basedir
;open_basedir =

Сохраните изменения, перезапустите apache и попробуйте снова выполнить ваш скрипт.

Вы можете либо на своем сервере, если вы используете Plesk для изменения open_basedir из графического интерфейса. Откройте plesk, перейдите к своему домену и откройте настройки PHP.

Настройки PHP Plesk

Теперь перейдите из списка, чтобы найти open_basedir и выберите никто из списка:

open_basedir Plesk

Сохраните изменения и попробуйте снова выполнить ваш скрипт.

Похвальные грамоты

Если вы используете библиотеку, как Unirest и вы получите такую ​​ошибку, вы можете попробовать первый вариант, установив для параметра CURLOPT_FOLLOWLOCATION значение false без изменения исходного кода библиотеки с помощью:

Unirest\Request::curlOpts(array(
CURLOPT_FOLLOWLOCATION => false
));

Не забудьте поделиться с сообществом, какой вариант сработал для вас, счастливого кодирования!

Ссылка на основную публикацию
Adblock
detector