仅显示某些国家/地区的代码

时间:2011-10-20 14:15:00

标签: php

所以我有一个联盟计划,最近从我们不服务的国家获得了很多糟糕的线索,我们告诉联盟会员将无效。无论如何,这将导致我们的逆转率通过屋顶。所以我想对此做些什么。

所以我想使用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';
}
?>

3 个答案:

答案 0 :(得分:1)

您需要验证$output是否符合预期(即字符串 - var_dump($output))。

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

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

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

答案 1 :(得分: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';
        }   
}

答案 2 :(得分:0)

小心$output=US 如果要比较两个操作数,则应使用==运算符