2012-05-04 54 views
1

我剛將一個PHP網站從Linux服務器轉移到Windows。一切似乎作用是相同的,除了一個巨大的差別:引用沒有值的PHP變量

$action = $_GET['action']; 
if($action=='add'){ 
    echo 'good'; 
} 

然而,這阻止了網頁加載的:

在Linux服務器上,下面這段代碼時$_GET['action']未設置被忽略Windows服務器。

是什麼工作是:

if(isset($_GET['action'])){ 
    $action = $_GET['action']; 
}else{ 
    $action=''; 
} 

if($action=='add'){ 
    echo 'good'; 
} 

2個問題:

  1. 有沒有配置服務器更寬容的沒有價值的變量的方法嗎?

  2. 第二個代碼示例是否更好?

+2

你不應該壓制未定義的變量錯誤。總是檢查是否存在。 – Nadh

回答

3
Is there a way to configure the server to be more forgiving of variables that don't have a value? 

把一個@符號盈的變量會告訴PHP忽略的錯誤。但我認爲這是不好的做法。

Is the second code example better practice? 

我認爲這是一個很好的做法,它總是很好的檢查。

國際海事組織你應該爲第二,你可以隨時使用三元操作符。所以不是

if(isset($_GET['action'])){ 
    $action = $_GET['action']; 
}else{ 
    $action=''; 
} 

你可以寫

$action = isset($_GET['action']) ? $_GET['action'] : ''; 

都做同樣的事情。

+0

downvote沒有解釋?如果你能解釋downvote的原因,我願意改進。 –

+0

謝謝!特別是對於三元操作員的建議 – user1375324

2

第二臺服務器只是配置爲默認顯示錯誤,而第一臺服務器沒有。

如果你把你的頁面的頂部下面的一段代碼,它會顯示第一臺服務器上,以及通知:檢查是否變量存在始終是一個很好的做法

error_reporting(E_ALL); 

0

在我看來,最好的做法是檢查是否設置了數組索引或變量,並保持錯誤報告保守的詳細。爲了便於處理數據並避免每次出現這種情況(通常,如果您使用PHP數組來保存可選的配置數據,但想要在代碼中嵌入合理的默認值)使用三元數據混淆我的代碼,我一直覺得建設性的有藏在我的核心工具代碼數組提取功能,如下所示:

function aex(&$srcArray, $variableName, $defaultValue = null) 
{ 
    return isset($srcArray[$variableName]) 
      ? $srcArray[$variableName] 
      : $defaultValue 
      ; 
} 

那麼接下來你只提取您的變量是這樣的:

$action = aex($_GET, 'action', 'none'); 

它將保證有au誠實的價值,而不是發出警告。