2016-04-24 38 views
1

それはjsonとすべてを取得します、それはちょうど要求IPをチェックしたくありません。バニラPHPを使用してミドルウェアを開発しようとしたときにエラーが発生しました

$wl_loc = "whitelist.json"; 
$wl = json_decode(file_get_contents($wl_loc), TRUE); 

function get_client_ip_server() { 
    $ipaddress = ''; 
    if ($_SERVER['HTTP_CLIENT_IP']) 
     $ipaddress = $_SERVER['HTTP_CLIENT_IP']; 
    else if($_SERVER['HTTP_X_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    else if($_SERVER['HTTP_X_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_X_FORWARDED']; 
    else if($_SERVER['HTTP_FORWARDED_FOR']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; 
    else if($_SERVER['HTTP_FORWARDED']) 
     $ipaddress = $_SERVER['HTTP_FORWARDED']; 
    else if($_SERVER['REMOTE_ADDR']) 
     $ipaddress = $_SERVER['REMOTE_ADDR']; 
    else 
     $ipaddress = 'UNKNOWN'; 

    return $ipaddress; 
} 

$urip = get_client_ip_server(); 

foreach($wl as $arr) { 
    $ip = $arr['ip']; 
    if($urip == $ip) { 
    header("Location: /maintenance/"); 
    } 
} 

と私のwhitelist.json

[ 
    { 
    "ip": "0.123.456.789" 
    }, 
    { 
    "ip": "123.456.789.0" 
    } 
] 

私は時間のためにこれで苦労してきた、すべてのインターネット上で見て、私は何も見つからなかっました。私が達成したいのは、それが各IP経由でループして、次に要求IPをチェックし、本当ならリダイレクトしない、そうでなければfalseを返してリダイレクトすることです。シンプルなロジックは、ここで働く以下のコードで

+0

あなたは特定のIPだけを許可していますが、あなたのjsonリストでは利用できないその他のものについてはメンテナンスをしていますか?確認してください! – ameenulla0007

+0

はい、そうです:) – swagster

+0

あなたは私のコードを答えてみましたか? – ameenulla0007

答えて

0

てみてください、

$newArray = array(); 
$myCallback = function($key) use(&$newArray){ 
    $newArray[] = $key["ip"]; 
}; 
array_walk($wl, $myCallback); 
$urip = get_client_ip_server(); 
if(!in_array($urip, $newArray)) { 
    header("Location: /maintenance/"); 
} 

はメインのみIPの単一のディメンションでを含む配列、およびifの使用のうち新しい配列を作成しましたステートメントは残りの部分を行います。

+0

私が現在出ているので、私はこれをテストすることができませんでした。私が帰ってきたら、私は戻ってきます。 – swagster

+0

申し訳ありませんが、これは機能しません。私のIPを使用しているときでも私はリダイレクトされます。 – swagster

+0

あなたのIPはjson listにはありません。 – ameenulla0007