2011-10-20 95 views
2

因此,我有一个联盟计划,最近一直在从我们没有服务的国家收到很多糟糕的消息,我们告诉联属会员将会失效。无论如何,这将导致我们的逆转速度达到顶峰。所以我想对此做点什么。仅显示某些国家的代码

所以我想使用geoip,它将我的东西作为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

@Jon,我不会打电话给你提到的* native *。 :)这是一个扩展或模块。 * Native * PHP就像'strpos()'或SPL库。 –

回答

1

你要验证$output是你所期望的(即一个字符串 - var_dump($output))。

但是,如果是这样,您需要引用您的国家/地区代码来进行字符串比较。此外,正如所指出的所示,请务必使用==进行比较。否则,这是一项任务。

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

否则,你的代码其余部分显示正确的(不知道你的确切逻辑)。

+0

很酷,我想我明白了 – Andrew

+0

没问题。欢迎来到StackOverflow。提醒投票你发现有用的答案,并最终标记*最好*回答*你的问题。 –

+0

它给了我一个小错误...我猜我需要另一个支架? if(($ _ SESSION ['check']!= 1)&&($ output =='US'|| $ output =='AU'|| $ output =='GB'|| $ output =='CA' )) – Andrew

0

小心$output=US 如果要比较两个操作数,你应该使用==操作

+0

并且引用字符串也是一个很好的选择。 – Mike

1

我对“geoip-lookup”不熟悉,但我在我的Ubuntu shell中使用了“geoiplookup”。希望我能假设他们是一样的?

将$ _SERVER值放到shell命令中可能会发生灾难,因为它们可能会被欺骗,所以请小心。

尝试以下操作:

// 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表示安全意见。用原始用户输入运行一个shell命令是一件很疯狂的事情。 – megaflop