php curl с ошибкой CURLOPT_FOLLOWLOCATION - PullRequest
10 голосов
/ 08 октября 2010

я получил ошибку

CURLOPT_FOLLOWLOCATION не может быть активирован, когда включен safe_mode или open_basedir установлен в

Я гуглю много решений, но с этим сайтом они не работают. нужно только CURLOPT_FOLLOWLOCATION. тупой хостер не хочет включать safe_mode или open_basedir. Могу ли я включить их самостоятельно, может быть, создать htaccess с некоторыми параметрами?

Ответы [ 4 ]

13 голосов
/ 08 октября 2010

Ошибка означает, что safe_mode или open_basedir ARE включены (возможно, open_basedir), и вы, вероятно, не сможете переопределить их, если у вашего хоста есть приличные настройки безопасности.

Итак, у вас есть выбор

1) смена хоста (не очень желательно, я представляю)

2) использовать функцию, аналогичную функции, найденной на странице php curl_setopt, т.е. http://www.php.net/manual/en/function.curl-setopt.php#95027

Ниже приведена фиксированная версия функции, указанной в пункте 2

.
function curl_redirect_exec($ch, &$redirects, $curlopt_header = false) {
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $data = curl_exec($ch);

    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code == 301 || $http_code == 302) {
        list($header) = explode("\r\n\r\n", $data, 2);

        $matches = array();
        preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches);
        $url = trim(str_replace($matches[1], "", $matches[0]));

        $url_parsed = parse_url($url);
        if (isset($url_parsed)) {
            curl_setopt($ch, CURLOPT_URL, $url);
            $redirects++;
            return curl_redirect_exec($ch, $redirects, $curlopt_header);
        }
    }

    if ($curlopt_header) {
        return $data;
    } else {
        list(, $body) = explode("\r\n\r\n", $data, 2);
        return $body;
    }
}
1 голос
/ 15 июня 2015

Если вы укажете, что только протоколы http и https разрешены при перенаправлении с использованием CURLOPT_REDIR_PROTOCOLS, вы сможете использовать CURLOPT_FOLLOWLOCATION без safe_mode или open_basedir.

0 голосов
/ 25 августа 2014

Вы можете использовать код, указанный в ссылке ниже, для альтернативы.

http://slopjong.de/2012/03/31/curl-follow-locations-with-safe_mode-enabled-or-open_basedir-set/

0 голосов
/ 04 ноября 2013

Привет, я исправляю добавление этого условия:

$safeMode = @ini_get('safe_mode');
$openBasedir = @ini_get('open_basedir');
if (empty($safeMode) && empty($openBasedir)) {
    curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
}else
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

и добавление в мой файл .htaccess

php_flag safe_mode off
php_flag open_basedir off
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...