2017-07-14 2 views
0

im einen Dienst, und in diesem Dienst im immer einige Daten aus einem api erstellen, es funktioniert gut, aber jetzt brauche ich einige HTTP-Anfragen zu behandeln, einer von ihnen ist die 404, da manchmal die Daten Ich versuche nicht zu finden.Handhabung Http-Anfragen nicht gefunden

Meine Methode von meinem Dienst ist:

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); 
    } 

Wenn es keine Daten, da im Fehler nicht Handhabung, ich diesen Fehler:

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 

Was ist der beste Weg, dies zu umgehen Art des Fehlers?

+0

Mögliches Duplikat [Datei \ _get \ _contents(), wie Fehler beheben "failed to open stream", "No such file"] (https://stackoverflow.com/questions/20562368/file-get-contents- how-to-fix-Fehler-failed-to-open-Stream-no-so-Datei) –

Antwort

2

Erstellen Sie diese Funktion in dem Helfer:

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

und prüfen, ob get_http_response_code($this->url."schedules/".$date."/schedule.json?api_key=".$this->api_key)! = 200.

-1

Können Sie nicht einfach einen try/catch-Block um die file_get_contents benutzen?

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

Und man kann auch die Warnung unterdrücken, indem sie eine @ vor dem Aufruf von file_get_contents setzen(): $ api = @file_get_contents

+0

nein, denn 'file_get_contents' wirft keine Ausnahmen. es löst ein "E_WARNING" aus. Die Ausnahme wird vom Fehler-/Ausnahme-Handler des Frameworks generiert. –

+1

die Warnung unterdrück _handling nicht it_ –

+1

Dann würden Sie in der Tat ein @ unterdrücken müssen, um die Warnung verwenden und danach prüfen, ob api $ ist nicht falsch: if (! $ Api === false) – Fonta