>  기사  >  백엔드 개발  >  PHP 컬 기능을 사용할 때 경고 메시지가 표시됩니다. 컬_setopt() [function.curl-setopt]: CURLO...오류 해결 방법

PHP 컬 기능을 사용할 때 경고 메시지가 표시됩니다. 컬_setopt() [function.curl-setopt]: CURLO...오류 해결 방법

怪我咯
怪我咯원래의
2017-05-19 16:39:181848검색

PHP에서 CURLOPT_FOLLOWLOCATION을 실행한 후 PHP 프롬프트 오류 메시지가 표시되는 경우:
경고: cur_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION은 safe_mode에 있거나 open_basedir이 설정된 경우 활성화할 수 없습니다...

오류에는 safe_mode와 open_basedir라는 두 가지 핵심 사항이 언급되어 있습니다. 가상 호스트이고 APPCHE를 설정할 수 있는 권한이 없으면 일반적으로 서버 구성을 수정하여 문제를 해결할 수 없습니다. 서버 구성 safe_mode 모두 꺼지고 일부 보안을 위해 사용자에 대한 일부 제한이 있습니다. open_basedir을 설정하여 가상 호스트 사용자의 PHP 실행 폴더를 제한하므로 CURLOPT_FOLLOWLOCATION(php 컬 기능, 딥 크롤링 데이터)을 사용할 때 한 번만 사용하세요. 301 리다이렉트가 있습니다. 잠시 후 기사에 언급된 오류 메시지가 나타납니다.

관련 정보를 확인한 후 빠르게 해결책을 찾았습니다. http://www.php.cn/php-weizijiaocheng- 362563.html, 이 방법은 모두 공식 PHP 도움말에서 사용할 수 있습니다.

구체적인 방법은 컬 문에서 cur_setopt($ch, CURLOPT_FOLLOWLOCATION, true)를 사용하고 php 함수에서 함수를 사용자 정의하는 것입니다.

code 다음과 같습니다:

function curl_redir_exec($ch,$debug="")
{
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, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$debbbb = $data;
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302) {
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
//print_r($url);
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
/*    if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];*/
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
//    debug('Redirecting to', $new_url);
return curl_redir_exec($ch);
} else {
$curl_loops=0;
return $debbbb;
}
}

함수를 정의한 후, 컬_setopt($ch, CURLOPT_FOLLOWLOCATION, true) 문을 컬_redir_exec($ch)

으로 교체합니다. PHP 파일이 오류가 발생하면 안 된다고 생각합니다. 이 코드에 대해서는 공식 PHP 링크에서 찾을 수 있습니다.

공식 PHP 코드는 다음과 같습니다.

/safe 模式不能curl的函数  
  
    function curl_redir_exec($ch)  
    {  
        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, true);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        $data = curl_exec($ch);  
        list($header, $data) = explode("\n\n", $data, 2);  
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
        if ($http_code == 301 || $http_code == 302)  
        {  
            $matches = array();  
            preg_match('/Location:(.*?)\n/', $header, $matches);  
            $url = @parse_url(trim(array_pop($matches)));  
            if (!$url)  
            {  
                //couldn't process the url to redirect to  
                $curl_loops = 0;  
                return $data;  
            }  
            $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));  
            if (!$url['scheme'])  
                $url['scheme'] = $last_url['scheme'];  
            if (!$url['host'])  
                $url['host'] = $last_url['host'];  
            if (!$url['path'])  
                $url['path'] = $last_url['path'];  
            $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');  
            curl_setopt($ch, CURLOPT_URL, $new_url);  
            debug('Redirecting to', $new_url);  
            return curl_redir_exec($ch);  
        } else {  
            $curl_loops=0;  
            return $data;  
        }  
    }  
//end

[권장 관련 항목] 기사]

1. PHP 컬링_setopt 함수 개념 소개 및 사용예

2.PHP 컬링_setopt() 함수 사용 간단한 예제 웹 페이지 캡처 및 POST 데이터

3.PHP 컬_setopt 함수로 사용자 로그인 예제 시뮬레이션

4.PHP 컬_exec 사용 예제에 대한 자세한 설명 기능

위 내용은 PHP 컬 기능을 사용할 때 경고 메시지가 표시됩니다. 컬_setopt() [function.curl-setopt]: CURLO...오류 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.