2011-08-09 3 views
1

file_get_contents()でWebページを読み込もうとしていて、問題が発生しています。file_get_contentsは、Webページを読み込もうとしているときに空の文字列を返します。

基本的に私のウェブアプリケーションは、ユーザーのクエリに基づいて動画を検索し、各動画のYouTubeページを読み込んで、APIによって提供されていない情報を検索します。 file_get_contents()を使用してYouTubeのページを読み込み、テキストをDOMパーサーに読み込みます。ほとんどの場合、これは魅力のように機能します。しかし、場合によっては、file_get_contents()が空の文字列を返すという警告が表示されます(すべての動画ではなく、一部の文字のみ)。私はそのURLへのリンクをエコーし​​、期待通りに機能するので、私が提供しているURLが正しいことを知っています。私はページをリフレッシュし、ブラウザを開いたり、別のブラウザに切り替えたりしますが、何も動作しません。それから、私は1時間か2の間それを残して、それに戻って来て、それは魔法のように再び働くでしょう!ここで

は、私のコードの抜粋です:

function processNext($int) { 
    // this function processes the next $int videos from the youtube data api response ($xmlDoc) 
    global $xmlDoc; 
    $begin = count($_SESSION["results"]) - $_SESSION["start"] + 1; 
     /* $_SESSION["results"] is the array of already-processed videos 
      $_SESSION["start"] and $_SESSION["end"] are the indexes of the first and last videos in the $xmlDoc 
     */ 
    $end = count($_SESSION["results"]) - $_SESSION["start"] + $int; 

    for ($i = $begin; $i <= $end; $i++) { 
     $video = $xmlDoc->entry[$i]; 
     $doc = new DOMDocument(); 
     $doc->strictErrorChecking = FALSE; 
     libxml_use_internal_errors(true); 

     // this is the line that is causing me problems 
     $doc->loadHTML(file_get_contents(getWatchURL(getVidID($video->id)))); 

     $doc = $doc->documentElement; 

       // then, do some processing on the $doc 

    } 
} 

は、それがのfile_get_contents()がタイムアウトしていることは可能ですか?私がやっていることに対して、cURLはより良いツールですか?

更新:私はcURLで同じ結果を得ます。

+0

一般的なページであり、多くの人が閲覧している場合、file_get_contentsがタイムアウトする可能性があります。 php.iniをチェックし、default_socket_timeoutがどのように設定されているかを確認してください。 – Kyle

答えて

1

$http_response_headerをご覧ください。リクエストのステータスコードを確認することができます。それが200以外であれば、何かが間違っている可能性があります。 More about status codes

+0

さて、私は間違いなくこれを試してみます。 – Ord

+0

これを実行したところ、404エラーが発生していました。しかし、これは私の問題の主な原因ではありませんでした。主な問題は、何らかの理由で、file_get_contents()が新しいhttp要求の作成を中止することがあることがあります。たとえば、file_get_contents()を10回呼び出すと、最初の5つのリクエストが機能しますが、その後、http_response_headerは次の5つのリクエストについて全く同じ(変更する必要のあるクッキーデータを含む)返される値は空の文字列になります。何が起こっているのでしょうか? – Ord

+0

これは問題の根源ではありませんでしたが、少なくとも今は失敗した要求を確認して繰り返すことができます。また、私は今、もっと答えが出るとは思わないと思う... :) – Ord

関連する問題