note 102121 added to function.curl-setopt
| From: | zsalab at osu1 dot php dot net | Date: | Fri, 28 Jan 2011 01:12:02 +0000 |
| Subject: | note 102121 added to function.curl-setopt | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-176405@lists.php.net to get a copy of this message | ||
Handling redirections with curl if safe_mode or open_basedir is enabled. The function working
transparent, no problem with header and returntransfer options. You can handle the max redirection
with the optional second argument (the function is set the variable to zero if max redirection
exceeded).
Second parameter values:
- maxredirect is null or not set: redirect maximum five time, after raise PHP warning
- maxredirect is greather then zero: no raiser error, but parameter variable set to zero
- maxredirect is less or equal zero: no follow redirections
<?
function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) {
$mr = $maxredirect === null ? 5 : intval($maxredirect);
if (ini_get('open_basedir') == '' && ini_get('safe_mode' ==
'Off')) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
} else {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
if ($mr > 0) {
$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_FORBID_REUSE, false);
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 && --$mr);
curl_close($rch);
if (!$mr) {
if ($maxredirect === null) {
trigger_error('Too many redirects. When following redirects, libcurl hit the maximum
amount.', E_USER_WARNING);
} else {
$maxredirect = 0;
}
return false;
}
curl_setopt($ch, CURLOPT_URL, $newurl);
}
}
return curl_exec($ch);
}
?>
----
Server IP: 69.147.83.197
Probable Submitter: 79.172.201.100
----
Manual Page -- http://www.php.net/manual/en/function.curl-setopt.php
Edit -- https://master.php.net/note/edit/102121
Del: integrated -- https://master.php.net/note/delete/102121/integrated
Del: useless -- https://master.php.net/note/delete/102121/useless
Del: bad code -- https://master.php.net/note/delete/102121/bad+code
Del: spam -- https://master.php.net/note/delete/102121/spam
Del: non-english -- https://master.php.net/note/delete/102121/non-english
Del: in docs -- https://master.php.net/note/delete/102121/in+docs
Del: other reasons-- https://master.php.net/note/delete/102121
Reject -- https://master.php.net/note/reject/102121
Search -- https://master.php.net/manage/user-notes.php