El error significa safe_mode o open_basedir están habilitadas (probablemente open_basedir) es probable que no puede anular o bien si su anfitrión tiene ninguna configuración de seguridad decente.
Así que usted tiene una opción
1) cambio de acogida (no es realmente deseable que imaginar)
2) utilizar una función similar a los encontrados en la página curl_setopt php, es decir http://www.php.net/manual/en/function.curl-setopt.php#95027
El siguiente es una versión fija de la función especificada en el punto 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;
}
}
divertido, pero la escritura funciona bien en mi host (barato y virtual), pero el jefe de acogida utilizar estúpida y no tienen deseo de cambiar. sobre esta función -i lo saben, cuando comienzo a escribir la escritura i llamada manualmente cada URL, pero la última URL no acostumbra a trabajar, y sólo utilizando CURLOPT_FOLLOWLOCATION me ayuda – kusanagi
EEK siento que en realidad no probar la función, que' tienes razón no funciona (que asume la cabecera de ubicación no es la última) he añadido una versión corregida probé a mi respuesta. – Rwky
Su solución tiene algunos errores. La expresión regular debería ser '[^ \ n]'. Cuando llames recursivamente a 'curl_redirect_exec' debes pasar' $ curlopt_header'. –