所以我有一个联盟计划,最近从我们不服务的国家获得了很多糟糕的线索,我们告诉联盟会员将无效。无论如何,这将导致我们的逆转率通过屋顶。所以我想对此做些什么。
所以我想使用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';
}
?>
答案 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
如果要比较两个操作数,则应使用==
运算符