Heim  >  Artikel  >  Backend-Entwicklung  >  Bei Verwendung der PHP-Curl-Funktion wird die Meldung „Warnung: curl_setopt() [function.curl-setopt]: CURLO...So beheben Sie den Fehler“ angezeigt

Bei Verwendung der PHP-Curl-Funktion wird die Meldung „Warnung: curl_setopt() [function.curl-setopt]: CURLO...So beheben Sie den Fehler“ angezeigt

怪我咯
怪我咯Original
2017-05-19 16:39:181801Durchsuche

Wenn Sie CURLOPT_FOLLOWLOCATION in PHP ausführen und dann die PHP-Prompt-Fehlermeldung erhalten:
Warnung: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION kann nicht aktiviert werden, wenn im Safe_mode oder ein open_basedir eingestellt ist …

Der Fehler erwähnt zwei wichtige Dinge: „safe_mode“ und „open_basedir“. Wenn Sie ein virtueller Host sind und keine Berechtigung zum Festlegen von APPCHE haben, können Sie das Problem nicht durch Ändern der Serverkonfiguration lösen Serverkonfiguration Safe_Mode Alle sind deaktiviert, und dann gibt es einige Einschränkungen für Benutzer, um die Sicherheit zu gewährleisten, indem open_basedir so eingestellt wird, dass der PHP-Ausführungsordner des virtuellen Hostbenutzers begrenzt wird, also wenn Sie CURLOPT_FOLLOWLOCATION (PHP-Curl-Funktion, Deep-Crawl-Daten) verwenden Es gibt eine 301-Weiterleitung. Die im Artikel erwähnte Fehlermeldung wird nach einer Weile angezeigt.

Nachdem ich die relevanten Informationen überprüft habe, habe ich schnell die Lösung gefunden: http://www.php.cn/php-weizijiaocheng-. 362563.html, diese Methoden sind alle in der offiziellen PHP-Hilfe verfügbar

Die spezifische Methode besteht darin, curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) in der Curl-Anweisung zu verwenden und eine Funktion in der PHP-Funktion anzupassen.

Code wie folgt:

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;
}
}

Nachdem die Funktion definiert ist, ersetzen Sie die Anweisung „curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true)“ durch „curl_redir_exec($ch)“

Danach Ich möchte, dass Ihre PHP-Datei keinen Fehler enthält. Sie können ihn im offiziellen PHP-Link finden:

Empfohlene verwandte Artikel]
/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.

Einführung in das Konzept und Anwendungsbeispiele der PHP-Funktion „curl_setopt“

2.

Ein einfaches Beispiel für die Verwendung der PHP-Funktion „curl_setopt“ )-Funktion zum Erfassen von Webseiten und POST-Daten

3.

php-Funktion „curl_setopt“ simuliert Beispiel für die Benutzeranmeldung

4.

Detaillierte Erläuterung des Verwendungsbeispiels von PHP-Funktion „curl_exec“

Das obige ist der detaillierte Inhalt vonBei Verwendung der PHP-Curl-Funktion wird die Meldung „Warnung: curl_setopt() [function.curl-setopt]: CURLO...So beheben Sie den Fehler“ angezeigt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn