2017-01-29 4 views
0

Ich habe 2 JSON Quellen und einer von ihnen 400 Bad Anfrage antworten (abhängig von Ladung in Servern) Deshalb möchte ich, dass meine PHP-Code die Antwort der beiden Server überprüfen und wählen Sie arbeiten einphp - Erkennen schlecht Anfrage

<?php 
$server1 = 'server1.lan' 
$server2 = 'server2.lan' 

/* 
Here a code to check and select the working server 
*/ 

$json=file_get_contents('https://'.$workingServer.'/v1/data?source='.$_GET['source']); 
$data = json_decode($json); 
if (count($data->data)) { 

     // Cycle through the array 
     foreach ($data->data as $idx => $data) { 
echo "<p>$data->name</p>\n"; 
?> 

Danke!

Antwort

0

Nachfolgend finden Sie eine Vorstellung davon, was Sie implementieren möchten. Ihr Ziel ist es, dass die Idee zu bekommen und so etwas wie die in Ihrer eigenen Art und Weise, mit einer normalen Fehlerbehandlung und Beseitigung von Code-Duplizierung zu implementieren:

$json = file_get_contents('https://server1.lan/v1/data'); 
if ($json === false) 
{ 
    $json = file_get_contents('https://server2.lan/v1/data'); 
    if ($json === false) 
    { 
     die('Both servers are unavailable'); 
    } 
} 

file_get_contents kehren false bei Ausfall boolean, so dass, wenn der erste Server nicht verfügbar ist, rufe den zweiten an. Wenn es auch nicht verfügbar ist, beenden Sie das Skript oder führen Sie eine Fehlerbehandlung durch, die Sie bevorzugen.

Möglicherweise möchten Sie ein Array möglicher Servernamen erstellen und eine Funktion verwenden, die über alle iteriert, bis eine funktionierende gefunden wird, und den Inhalt zurückgibt oder bei einem Fehler eine Ausnahme auslöst.

Ich würde auch vorschlagen, dass Sie curl verwenden, die Ihnen eine Option gibt, die Fehlercodes der Anfrage zu sehen, die Anfrage selbst anzupassen, und so weiter.

0

Überprüfen Sie $http_response_header nach der file_get_contents Anruf.

$json = file_get_contents(('https://'.$server1.'/v1/data?source='.$_GET['source']); 

if (strpos($http_response_header[0],"400") > 0) 
{ 
    $json = file_get_contents(('https://'.$server.'/v1/data?source='.$_GET['source']); 
} 

Siehe Beispiele bei http://php.net/manual/en/reserved.variables.httpresponseheader.php