PHP 数组键字符串不带引号

发布于 2024-12-04 15:06:16 字数 209 浏览 0 评论 0原文

我正在将文件移动到服务器,并使用 $_GET[mode] 等变量,而“mode”中不带“”(单引号)。它在本地运行良好,但在服务器上我收到通知。我该如何克服这个问题?这是我的 phpinfo 文件 phpinfo 有什么方法可以让我们在服务器上也有相同的行为吗?

I am moving the files to the server and is using variables like $_GET[mode] without ''(single quotes) in 'mode'. It works perfectly locally but on the server i am getting notices.. How can i overcome this?here is my phpinfo file
phpinfo
Is there any way we can have same behavior to work on server as well?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感性 2024-12-11 15:06:16

如何克服 E_NOTICE 抱怨您忘记了字符串周围的引号?

在字符串周围添加引号。

$_GET['mode']

另外,听起来本地服务器上的 error_reporting 级别不够。它应该很高,以便您在开发网站/应用程序时看到这些类型的错误。

在您的生产服务器上,它可能设置得较低。

How can you overcome the E_NOTICEs that complain that you forgot quotes around your strings?

Add quotes around your strings.

$_GET['mode']

Also it sounds like the error_reporting level on your local server is not sufficient. It should be high, so that you see these sorts of mistakes as you develop your website/application.

On your production server it may be set lower.

蓝天 2024-12-11 15:06:16

引用 PHP 数组手册:

为什么 $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 作为常量)。如果您只想检查是否设置了常量,请使用 define( ) 函数。

解决方案:在键两边加引号。

Quoting the PHP Manual on Arrays:

Why is $foo[bar] wrong?

Always use quotes around a string literal array index. For example, $foo['bar'] is correct, while $foo[bar] is not. But why? It is common to encounter this kind of syntax in old scripts:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string ('bar' - notice the quotes). PHP may in future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string. For instance, if there is no defined constant named bar, then PHP will substitute in the string 'bar' and use that.

So, in other words: mode is an undefined constant.

Quoting the PHP Manual on Constants:

If you use an undefined constant, PHP assumes that you mean the name of the constant itself, just as if you called it as a string (CONSTANT vs "CONSTANT"). An error of level E_NOTICE will be issued when this happens. See also the manual entry on why $foo[bar] is wrong (unless you first define() bar as a constant). If you simply want to check if a constant is set, use the defined() function.

Solution: put quotes around the key.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文