0

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

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

任何帮助表示赞赏。

4

1 回答 1

1

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

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

对于这种情况,我的解决方案是手动跟踪 10 个级别的重定向,发出递归 curl 请求。

更新:

CURLOPT_RETURNTRANSFER告诉 curl 像这样返回结果:$result = curl_exec($ch);所以如果要打印,请在echo前面加上curl_exec()

于 2013-03-15T22:17:47.270 回答