2017-01-29 10 views
0

私は400不正な要求を返信2つのJSON源とそれらのいずれかを持っている は、だから私は私のPHPコードは、両方のサーバーの答えを確認することを望む(サーバ内の電荷の依存)と作業を選択1PHP - 検出悪い要求

<?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"; 
?> 

ありがとうございます!

答えて

0

で例を参照してください、あなたが実装するかもしれないもののアイデアです。あなたの目標は、コードの重複の通常のエラー処理と除去と、そのアイデアを取得し、独自の方法でそのような何かを実装することです:最初のサーバーが使用できないので、もし

$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戻ると、失敗した場合にfalseブール、秒を呼び出します。それも利用できない場合は、スクリプトを終了するか、何らかのエラー処理を行います。

可能なサーバー名の配列を作成し、それが有効なサーバー名を検出して内容を返すまで、または失敗した場合は例外をスローするまで、すべてのサーバー名を反復する関数を使用できます。

curlを使用することをお勧めします。これにより、リクエストのエラーコードを表示したり、リクエスト自体をカスタマイズしたりすることができます。

0

file_get_contentsを呼び出した後に$http_response_headerをチェックしてください。

$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']); 
} 

以下http://php.net/manual/en/reserved.variables.httpresponseheader.php

関連する問題