2011-10-20 43 views
-2

這是我的PHP代碼,本質上是檢查用戶的國家,如果它匹配允許的國家,我讓聯盟代碼運行。以及由於某種原因,它沒有運行如果聲明運行不正常

<?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 '<div class="shareasale"><img src="https://shareasale.com/sale.cfm?amount=0.00&tracking='; 
echo $submission; 
echo '&transtype=lead&perlead=25.00&merchantID=###" width="1" height="1"></div>'; 
} 
?> 

我覺得這是一個問題與OR位,因爲當我添加了一個否則,如果檢查變量,我得到了$輸出作爲美國和$ _SESSION [「檢查」]作爲空白。這意味着if語句應該正常運行。

有沒有人有任何想法,爲什麼這是行不通的?

+0

什麼是不工作?您是否嘗試通過在代碼中的各個位置打印語句和狀態來調試它? –

+0

當它「未運行」時,$ _SESSION ['check']'和'$ output'的var_dump是什麼?在'if'語句之前,有一行代碼'var_dump($ _ SESSION ['check'],$ output);' – webbiedave

+0

你試過在$ output上使用trim嗎?也許你在你的瀏覽器中看到的東西之前或之後有一個新的行或空格。 – mishu

回答

6

您沒有session_start()調用,因此您的$ _SESSION數組將不會被填充,因此沒有check值用於比較。

同樣,你確定你的shell_exec()調用實際上工作嗎? geoip-lookup可能不在PHP運行該程序的任何shell的路徑中。輸出也可能包含換行符,回車符等,這些符號在if()調用中的確切字符串匹配要求沒有考慮到。 $output實際上可能是「US \ n」,而不僅僅是「US」。

+0

哦,是的,我有在文件的頂部,所以我忘了複製它...它在那裏 – Andrew

+0

我跑它作爲一個其他如果檢查變量,它出來作爲美國,所以應該沒問題以及 – Andrew

+0

@Andrew,你做了什麼來確認沒有''\ n「'? – Mike