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 がないと、リダイレクトを要求するヘッダーだけが返されます。手動でそれに従うか、オンにする必要がありますfollowlocation。fopen ラッパーが使用可能な場合は、簡素化のために代わりに使用することをお勧めします ( file_get_contents($video))。

于 2012-05-16T22:18:52.887 に答える
2

必要に応じてページをリダイレクトできるように設定CURLOPT_FOLLOWLOCATIONしてみてください。true

于 2012-05-16T22:18:56.327 に答える