Der Fehler bedeutet safe_mode oder open_basedir ARE aktiviert (wahrscheinlich open_basedir) Sie können wahrscheinlich auch nicht überschreiben, wenn Ihr Host über anständige Sicherheitseinstellungen verfügt.
So haben Sie die Wahl
1) Änderung Host (nicht wirklich wünschenswert Ich stelle mir vor)
2) fand eine ähnliche Funktion wie diejenigen verwenden, auf der PHP-curl_setopt Seite, dh http://www.php.net/manual/en/function.curl-setopt.php#95027
Die Nachfolgend finden Sie eine feste Version der Funktion in Nummer 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;
}
}
lustig, aber Skript funktioniert gut auf meinem Host (billig und virtuell), aber Chef verwenden dumme Gastgeber und haben keine Lust zu ändern. über diese Funktion - ich weiß es, wenn ich anfange, Skript zu schreiben, ich manuell jede URL aufrufen, aber letzte URL nicht zu arbeiten, und nur mit CURLOPT_FOLLOWLOCATION hilft mir – kusanagi
Eek tut mir leid, ich habe nicht wirklich die Funktion getestet, Sie ' Richtig, es funktioniert nicht (es geht davon aus, dass der Location-Header nicht der letzte ist). Ich habe meiner Antwort eine korrigierte Version hinzugefügt, die ich getestet habe. – Rwky
Ihre Lösung hat ein paar Fehler. Die Regex sollte '[^ \ n]' sein. Wenn Sie 'curl_redirect_exec' rekursiv aufrufen, sollten Sie' $ curlopt_header' übergeben. –