I got this error message:
CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in.
safe_mode i
Never tested in real environment but has more transparency with curl_exec (no problem with header and returntransfer options).
function curl_exec_follow(/*resource*/ $ch, /*int*/ $maxredirect = 5) {
if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
} else {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
$newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$rch = curl_copy_handle($ch);
curl_setopt($rch, CURLOPT_HEADER, true);
curl_setopt($rch, CURLOPT_NOBODY, true);
curl_setopt($rch, CURLOPT_RETURNTRANSFER, true);
do {
curl_setopt($rch, CURLOPT_URL, $newurl);
$header = curl_exec($rch);
if (curl_errno($rch)) {
$code = 0;
} else {
$code = curl_getinfo($rch, CURLINFO_HTTP_CODE);
if ($code == 301 || $code == 302) {
preg_match('/Location:(.*?)\n/', $header, $matches);
$newurl = trim(array_pop($matches));
} else {
$code = 0;
}
}
} while ($code && $maxredirect--);
curl_close($rch);
curl_setopt($ch, CURLOPT_URL, $newurl);
}
return curl_exec($ch);
}