PHP获取URL跳转后的最终地址
作者:matrix 被围观: 13,628 次 发布时间:2013-12-31 分类:零零星星 | 7 条评论 »
这是一个创建于 4002 天前的主题,其中的信息可能已经有所发展或是发生改变。
仅是获得响应头Location的最终地址
$url='http://189.io/G3qrdn';
echo get_jump_url($url);
function get_jump_url($url) {
$url = str_replace(' ','',$url);
do {//do.while循环:先执行一次,判断后再是否循环
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$header = curl_exec($curl);
curl_close($curl);
preg_match('|Location:\s(.*?)\s|',$header,$tdl);
if(strpos($header,"Location:")){
$url=$tdl ? $tdl[1] : null ;
}
else{
return $url.'';
break;
}
}while(true);
}
参考:http://bbs.csdn.net/topics/390349430
附curl常量:
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);//允许链接自动跳转
curl_setopt($curl, CURLOPT_MAXREDIRS, 3);//限定CURLOPT_FOLLOWLOCATION递归返回的数量
CURLOPT_AUTOREFERER :curl 会自动添加 Referer header 在每一个跳转链接,也就是一跟到底。
这样也就避免上面代码的do while循环。
建议使用get_headers()函数解决
参考:http://upc.gg.blog.163.com/blog/static/297984982013123970455/
测试不行啊。$url = 'http://www.chong4.com.cn/cydb/go.php?7218_29882_22t'; 还是只得到了跳转一次的。求解
为什么我在本地测试可以获取,上传到空间获取的还是原地址??
这个真不清楚哦。我只是代码的搬运工
CURLOPT_FOLLOWLOCATION指明:
让curl递归的抓取http头中Location中指明的url。
当抓取次数超过CURLOPT_MAXREDIRS时,递归终止。
😀 谢啦 有这玩意真好
更简单的:
飘过--- 😎