我正在将文件移动到服务器,并在“模式”中使用$ _GET [mode]等变量而没有''(单引号)。它在本地完美运行,但在服务器上我收到通知..我怎么能克服这个?这是我的phpinfo文件 phpinfo 我们有什么方法可以在服务器上使用相同的行为吗?
答案 0 :(得分:9)
你怎么能克服那些抱怨你在字符串周围忘记引号的E_NOTICE
?
在字符串周围添加引号。
$_GET['mode']
听起来本地服务器上的error_reporting
级别还不够。它应该很高,以便您在开发网站/应用程序时看到这些错误。
在您的生产服务器上,它可能会设置得更低。
答案 1 :(得分:6)
为什么$ foo [bar]错了?
始终在字符串文字数组索引周围使用引号。例如,
$foo['bar']
是正确的,而$foo[bar]
则不正确。但为什么?在旧脚本中遇到这种语法是很常见的:
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
这是错误的,但它确实有效。原因是此代码具有未定义的常量(
bar
)而不是字符串('bar'
- 注意引号)。 PHP可能在将来定义常量,不幸的是,这些代码具有相同的名称。它的工作原理是因为PHP自动将一个裸字符串(一个与任何已知符号不对应的不带引号的字符串)转换为包含裸字符串的字符串。例如,如果没有名为bar
的已定义常量,则PHP将替换字符串'bar'
并使用它。
因此,换句话说:mode
是一个未定义的常量。
如果使用未定义的常量,PHP假定您指的是常量本身的名称,就像您将其称为字符串一样(CONSTANT vs“CONSTANT”)。发生这种情况时,将发出error of level
E_NOTICE
。另请参阅why$foo[bar]
is wrong上的手动输入(除非您首先define()
栏为常量)。如果您只想检查是否设置了常量,请使用defined()
功能。
解决方案:在密钥周围加上引号。