2017-07-14 21 views
0

サービスを作成していて、このサービスではAPIからデータを取得していますが、うまくいきましたが、httpリクエストを処理する必要があります。検索しようとしているIMが見つかりません。Httpリクエストの処理が見つかりません

私のサービスからの私の方法は次のとおりです。

public function getAllGamesFromDate($date = "2017-08-09", $tournament = "123") 
    { 

     $api = file_get_contents($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key); 

     $result = collect(json_decode($api, true))->toArray(); 

     $data = []; 



     foreach ($result['events'] as $event){ 
      if($event['id'] == $tournament){ 
       array_push($data,$event); 
      } 
     } 

     return response($data); 
    } 

データが存在しない場合、イムはエラーを処理していないことから、私はこのエラーを取得:

ErrorException in MyService.php line 32: 
file_get_contents(https://api.url...): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found 

これを処理するための最良の方法は何ですかエラーの種類?

+0

[ファイル\ _get \ _contents()の重複した可能性があります。エラー "ストリームを開くことに失敗しました"、 "そのようなファイルはありません"](https://stackoverflow.com/questions/20562368/file-get-contents- 'file_get_contents'が例外をスローしないので、 –

答えて

2

ヘルパーで、この関数を作成します。

function get_http_response_code($url) { 
    $headers = get_headers($url); 
    return substr($headers[0], 9, 3); 
} 

とし、get_http_response_code($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key)!= 200かどうかを確認してください。

-1

あなたは単にfile_get_contentsの周りにtry/catchブロックを使用できませんか?

try { 
    $api = file_get_contents($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key); 
{ catch (Exception $e) { 
    echo $e->getMessage(); 
} 

そして、あなたはまた、のfile_get_contents()への呼び出しの前に@を入れて警告を抑制することができます:$ API = @file_get_contents

+0

はnoです。 'E_WARNING'をトリガします。例外は、フレームワークのエラー/例外ハンドラによって生成されます。 –

+1

警告を抑制することは_handling_handではありません。 –

+1

次に、$ apiがfalseでない場合には、@を使用して警告を抑制しなければなりません。 if(!$ api === false) – Fonta

関連する問題