2011-10-20 5 views
2

私は最近、私たちがサービスしていない国から多くの悪いリードを得ているアフィリエイトプログラムを持っています。とにかく、これは逆転率が屋根を通過する原因になります。だから私はそれについて何かしたい。特定の国のみのコードを表示

だから、ジープを使用して、2文字の国コードとして私に物を渡します。

<?php 
    $output = shell_exec('geoip-lookup '.$_SERVER['REMOTE_ADDR']); 
?> 

どのようにまとめますか?

これが正しいですか?

<?php 
$output = shell_exec('geoip-lookup '.$_SERVER['REMOTE_ADDR']); 
if($_SESSION['check']!=1) && ($output=='US' || $output=='AU' || $output=='GB' || $output=='CA') 
{ 
    $submission = $_POST['submission_id']; 
    $_SESSION['check']=1; 
    echo 'insert pixel'; 
} 
?> 
+1

このため、[ネイティブPHPコード](http://www.maxmind.com/app/php)がありますのに、なぜ外部の実行ファイルにわざわざ? – Jon

+1

@Andrew、以下の回答者の訂正を含めるためにあなたの質問を「修正」しないでください。さもなければ、それらはもはや適用されなくなり、将来これを読んだ人は混乱します。そこにエラーを残すことが最善です。 – Mike

+0

@ジョン、私はあなたが*ネイティブ*と言いました。 :)拡張モジュールまたはモジュールです。 *ネイティブ* PHPは 'strpos()'やSPLライブラリのようなものです。 –

答えて

1

を使用する必要があります$output=US には注意してくださいあなたは(つまり、文字列 - var_dump($output))期待するものです。

ただし、提供されている場合は、文字列の比較を行うために国コードを引用する必要があります。また、近辺で示されるように、比較のために必ず==を使用してください。それ以外の場合は、割り当てです。

if ($_SESSION['check'] != 1 && ($output == 'US' || $output == 'AU' ...)) { 

そうでない場合は、あなたのコードの残りの部分は、(あなたの正確なロジックを知らなくても)正しいを表示されます。

+0

ああクール、私はそれを持っていると思う – Andrew

+0

問題はありません。 StackOverflowへようこそ。あなたが助けてくれた回答に投票して、最終的にあなたの*質問に答えた方に印をつけてください。 –

+0

それは私に小さなエラーを与えている...私は別のブラケットが必要だと思いますか? $出力== '出力' == '出力' == 'GB' ||出力== 'CA' )) – Andrew

0

あなたは2つのオペランドを比較したい場合は、あなたが$outputを確認したいと思う==オペレータ

+0

そして文字列を引用するのも良いでしょう。 – Mike

1

私は "geoip-lookup"に慣れていませんが、私の "geoiplookup"は私のUbuntuシェルで動作しています。うまくいけば私は彼らが同じであると仮定することができますか?

$ _SERVER値をシェルコマンドに入れることは、偽装する可能性があるため災害の可能性があります。そのため注意が必要です。

は、以下のことを試してみてください。

// Make sure that the remote address is an IP and not something harmful, like "1.1.1.1; rm ../ -rf". 
$found = preg_match('/^(?:\d{1,3}\.){3}\d{1,3}$/', $_SERVER['REMOTE_ADDR']); 

if($found) 
{ 
     $command = escapeshellcmd('geoiplookup '.escapeshellarg($_SERVER['REMOTE_ADDR'])); 
     $output = shell_exec($command); 

     if(($_SESSION['check']!=1) && (strpos($output,'US')!==false || strpos($output,'AU')!==false || strpos($output,'GB')!==false || strpos($output,'CA')!==false)) 
     { 
       $submission = $_POST['submission_id']; 
       $_SESSION['check'] = 1; 
       echo 'insert pixel'; 
     } 
} 
+0

+1。生のユーザー入力でシェルコマンドを実行するのは夢中です。 – megaflop

関連する問題