不确定为什么使用CURL获取重定向的最后一个URL在本地工作但不在生产服务器上工作

时间:2013-03-15 22:04:47

标签: php curl

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

另外,我应该指出 CURL已安装在生产服务器上并且运行正常。我没有收到任何错误。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

如果启用了安全模式,则无法设置CURLOPT_FOLLOWLOCATION true,这是许多生产环境的情况。在这种情况下,会触发警告,如下所示:

  

警告:curl_setopt()[function.curl-setopt]:当启用safe_mode或在第56行的/home/xxx/public_html/xxx.php中设置open_basedir时,无法激活CURLOPT_FOLLOWLOCATION

我针对这种情况的解决方案是手动跟踪10个级别的重定向,进行递归卷曲请求。

<强>更新

另外CURLOPT_RETURNTRANSFER告诉curl返回如下结果:$result = curl_exec($ch);所以如果您想要打印,请在echo之前加curl_exec()