只显示特定国家的代码


Displaying code only for certain countries

我有一个联盟计划,最近从我们不服务的国家得到了很多不好的线索,我们告诉联盟将无效。不管怎样,这将导致我们的反转率达到顶点。所以我想做点什么。

我想用geoip,它让我得到两个字母的国家代码。

<?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';
}
?>

您需要验证$output是您所期望的(即字符串- var_dump($output))。

但是,如果是的话,您需要引用您的国家代码来进行字符串比较。另外,正如十六进制所指出的,一定要使用==进行比较。否则,它就是赋值。

if ($_SESSION['check'] != 1 && ($output == 'US' || $output == 'AU' ...)) {
否则,剩下的代码看起来是正确的(不知道你的确切逻辑)。

我不熟悉"geoip-lookup",但我有"geoip-lookup"在我的Ubuntu shell工作。希望我能假设它们是一样的?

将$_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';
        }   
}

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