希望有人能指点我正确的方向。我有一个重定向到媒体文件的URL。这就是我想要找回的信息。(主机和实际文件的路径)。
使用此代码
<?php
$url='http://urs.pbs.org/redirect/71201be9214242cbbc32633826f8092b';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($ch);
$newurl=curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$p = parse_url($newurl) ;
$rtmp=$p['scheme']."://".$p['host'];
$episode=$p['path'];
echo $rtmp.'<BR>';
echo $episode.'<BR>';
?>
在本地,它工作得很好。但在我的生产服务器上,它只是回踢$url。
打印出来http://urs.pbs.org//71201重定向be9214242cbbc3233826f8092b
另外,我应该指出,CURL已经安装在生产服务器上,并且运行良好。我没有得到任何错误。感谢您的帮助。
如果启用了安全模式,则CURLOPT_FOLLOWLOCATION
不能设置为true
,这是许多生产环境的情况。在这种情况下,如果触发一个警告,类似如下:
警告:curl_setopt() [function。curl-setopt]: CURLOPT_FOLLOWLOCATION不能被激活,当启用了safe_mode或者在/home/xxx/public_html/xxx.php中设置了open_basedir
对于这种情况,我的解决方案是手动执行重定向,例如10个级别,进行递归curl请求。
更新:
也CURLOPT_RETURNTRANSFER
告诉curl返回这样的结果:$result = curl_exec($ch);
所以如果你想要它打印,在curl_exec()
之前放一个echo