Heim >Backend-Entwicklung >PHP-Tutorial >Bei Verwendung der PHP-Curl-Funktion wird die Meldung „Warnung: curl_setopt() [function.curl-setopt]: CURLO...So beheben Sie den Fehler' angezeigt
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“Ein einfaches Beispiel für die Verwendung der PHP-Funktion „curl_setopt“ )-Funktion zum Erfassen von Webseiten und POST-Datenphp-Funktion „curl_setopt“ simuliert Beispiel für die BenutzeranmeldungDetaillierte 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!