希望有人能指出我正确的方向。我有一个重定向到媒体文件的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已安装在生产服务器上并且运行正常。我没有收到任何错误。
任何帮助表示感谢。
答案 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()