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