function get_url_contents($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 遇到302自动跳转
$file_contents = curl_exec($ch);
curl_close($ch);
return $file_contents;
}
遇到curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in 错误,可以还用下面的函数:
function get_url($url)//获得url地址的网页内容
{
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_redir_exec($ch); // 用curl_redir_exec替代curl_exec
curl_close($ch);
return $file_contents;
}
/* 获取内容的长度 */
function get_content_length($str)
{
$matches = array();
preg_match('/Content-Length:(.*?)\n/', $str, $matches);
$len = @trim(array_pop($matches));
if (!$len) {
$len = 0;
}
return (int)$len;
}
function curl_redir_exec($ch)
{
static $curl_loops = 0;
static $curl_max_loops = 20; // 最大循环次数
if ($curl_loops++ >= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
/* 分离header和content */
$content_len = get_content_length($data);
$header = substr($data, 0, strlen($data) - $content_len);
$data = substr($data, strlen($header));
$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)
{
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
return curl_redir_exec($ch);
} else {
$curl_loops=0;
return $data;
}
}