不知道为什么使用CURL获取重定向的最后一个url在本地工作,而不是在生产服务器上


Not sure why getting the last url for a redirect using CURL is working locally but not on production server

希望有人能指点我正确的方向。我有一个重定向到媒体文件的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