3

我将这个函数用于我的 cURL 查询。

function get_source($url){
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
$source = curl_exec ($ch);
return $source;
}

该功能完美运行,但是当我尝试在我的 MySQL 数据库中的 URL 上运行它时,它不会工作......

我已经完成了以下测试...我正在尝试获取 YouTube 视频的来源:

测试1:

echo get_source("http://www.youtube.com/watch?v=WxfZkMm3wcg");

**Result: Works, returns the source code of the video.**

测试 2:

$video="http://www.youtube.com/watch?v=WxfZkMm3wcg";
echo get_source($video);

**Result: Works, returns the source code of the video.** 

测试 3:

$video_arr=mysql_fetch_array(mysql_query("SELECT video FROM videos WHERE id='$video_id'")); 
$video=$video_arr['video'];
echo get_source($video);

**Result: Does not work. A blank string gets returned and there aren't any cURL errors that I can see...**

测试 4(只是为了显示我的查询有效)

$video_arr=mysql_fetch_array(mysql_query("SELECT video FROM videos WHERE id='$video_id'")); 
$video=$video_arr['video'];
var_dump($video);

**Result: string(38) "http://youtube.com/watch?v=WxfZkMm3wcg"**

我不知道该怎么做,甚至不知道出了什么问题。有什么建议么?

4

2 回答 2

2

你为什么要CURLOPT_FOLLOWLOCATION设置false?youtube 的非 www url 正在尝试重定向到 www,但没有跟随位置,您得到的只是请求重定向的标头。您要么需要手动操作,要么打开followlocation。为简单起见,您可能希望使用 fopen 包装器(如果它们可用file_get_contents($video))。

于 2012-05-16T22:18:52.887 回答
2

尝试设置CURLOPT_FOLLOWLOCATION为,true以便页面可以在必要时重定向。

于 2012-05-16T22:18:56.327 回答