コード例 #1
0
ファイル: helper.php プロジェクト: tamlen/WordBridge
 /**
  * curl_redir_exec
  * Work around safe_mode restrictions on CURLOPT_FOLLOWLOCATION
  * Taken from http://php.net/manual/en/function.curl-setopt.php#71313
  * eion at bigfoot.com
  */
 function curl_redir_exec($ch, $curl_loops = 0)
 {
     static $curl_max_loops = 20;
     if ($curl_loops++ >= $curl_max_loops) {
         return FALSE;
     }
     curl_setopt($ch, CURLOPT_HEADER, true);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     $data = curl_exec($ch);
     list($header, $data) = preg_split('/(\\r?\\n){2}/', $data, 2);
     $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
     if ($http_code == 301 || $http_code == 302) {
         $matches = array();
         preg_match('/Location:(.*?)(?:\\n|$)/', $header, $matches);
         $url = parse_url(trim(array_pop($matches)));
         if (!$url) {
             //couldn't process the url to redirect to
             return $data;
         }
         $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
         if (!$url['scheme']) {
             $url['scheme'] = $last_url['scheme'];
         }
         if (!$url['host']) {
             $url['host'] = $last_url['host'];
         }
         if (!$url['path']) {
             $url['path'] = $last_url['path'];
         }
         $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query'] ? '?' . $url['query'] : '');
         curl_setopt($ch, CURLOPT_URL, $new_url);
         return WordbridgeHelper::curl_redir_exec($ch, $curl_loops);
     } else {
         return $data;
     }
 }