我刚刚将一个PHP网站从Linux服务器转移到了Windows。除了一个巨大的差异外,一切看起来都是一样的:
在Linux服务器上,如果未设置$_GET['action']
,则会忽略以下代码:
$action = $_GET['action'];
if($action=='add'){
echo 'good';
}
但是,这会阻止在Windows服务器上加载页面。
工作是什么:
if(isset($_GET['action'])){
$action = $_GET['action'];
}else{
$action='';
}
if($action=='add'){
echo 'good';
}
2个问题:
有没有办法让服务器更宽容没有值的变量?
第二个代码示例是更好的做法吗?
答案 0 :(得分: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?
我认为这是一个好习惯,检查总是好的。
IMO你应该去第二,你可以随时使用三元运算符。所以而不是
if(isset($_GET['action'])){
$action = $_GET['action'];
}else{
$action='';
}
你可以写
$action = isset($_GET['action']) ? $_GET['action'] : '';
两者都做同样的事情。
答案 1 :(得分:2)
第二台服务器仅配置为默认显示错误,而第一台服务器则不显示错误。
如果您将以下代码放在页面顶部,它也会在第一台服务器上显示通知:
error_reporting(E_ALL);
检查变量是否存在总是一个好习惯。
答案 2 :(得分:0)
在我看来,检查是否设置了数组索引或变量,并保持错误报告保守冗长,这绝对是更好的做法。
为了便于处理数据并避免每次出现这种情况时使用三元组混乱我的代码(通常,如果您使用PHP数组来保存可选配置数据但希望在代码中嵌入合理的默认值),我有总是发现在我的核心实用程序代码中隐藏了一个数组提取函数是有建设性的,如下所示:
function aex( &$srcArray, $variableName, $defaultValue = null )
{
return isset( $srcArray[$variableName] )
? $srcArray[$variableName]
: $defaultValue
;
}
那么你就像这样提取你的变量:
$action = aex( $_GET, 'action', 'none' );
它将保证有一个有用的值,而不是发出警告。