curl follow location error

前端 未结 6 1057
耶瑟儿~
耶瑟儿~ 2020-11-27 06:48

I got this error message:

CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in.

safe_mode i

6条回答
  •  抹茶落季
    2020-11-27 07:35

    I encountered a similar situation a while back and found the solution below. If you know generally where you'll be redirected to this might work for you.

        function curl($url, $postVars)
    {
        $go = curl_init($url);
        curl_setopt ($go, CURLOPT_URL, $url);
        curl_setopt($go, CURLOPT_VERBOSE, 1);
    
        //follow on location problems
        if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off'))
        {
            curl_setopt ($go, CURLOPT_FOLLOWLOCATION, $l);
            $syn = curl_exec($go);
            if(curl_error($go))
                return false;
        }
        else
            $syn = curl_redir_exec($go, $postVars);
        curl_close($go);
        return $syn;
    }
    
    function curl_redir_exec($ch, $postVars)
    {
        static $curl_loops = 0;
        static $curl_max_loops = 20;
        if ($curl_loops++>= $curl_max_loops)
        {
            $curl_loops = 0;
            return FALSE;
        }
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postVars);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    
        $data = curl_exec($ch);
        if(curl_error($ch))
            return false;
        list($header, $data) = explode("\n\r", $data, 2);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
        $redirect_page = "[0-9]*.html";
        $base_redirect = "http://example.com/";
    
        if ($http_code == 301 || $http_code == 302)
        {
            $matches = array();
            $pregs = eregi($redirect_page, $data, $matches);
            $new_url = $base_redirect . $matches[0];
            if (!$new_url)
            {
                //couldn't process the url to redirect to
                $curl_loops = 0;
                return $data;
            }
            curl_setopt($ch, CURLOPT_URL, $new_url);
    
            return curl_redir_exec($ch, $postVars);
        }
        else
        {
            $curl_loops=0;
            return $data;
        }
    }
    

提交回复
热议问题