note 102121 added to function.curl-setopt

From: 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

« previous php.notes (#176405) next »