【问题标题】:Do not use quotes in php variables不要在 php 变量中使用引号
【发布时间】:2012-01-27 02:13:06
【问题描述】:

在我的 xampp 中,当我调用不带引号的函数时,它会返回以下错误 ($_SERVER[SERVER_NAME])

Notice: Use of undefined constant SERVER_NAME - assumed 'SERVER_NAME'

我必须在 php.ini 中更改什么来纠正这个问题?

谢谢

更新: :) 当然我知道,如果我添加引号,它会起作用,但我需要配置服务器以在没有引号的情况下工作。

我清楚地说明了我的问题。在我的服务器中,如果我不使用引号,它不会返回任何警告和错误。它取决于 xampp 版本。现在我在我的本地机器上安装了更新版本的 xampp,它显示了通知,所以我不能使用我最后的项目,因为有很多通知。 (即使我使用我定义的变量,它也会返回这样的通知,例如$myVariable[myItem])。

我可以使用

error_reporting(0)

但这会隐藏所有错误。所以我只需要为我的服务器指定新规则,或者使用旧版本。


那么,为什么投反对票?


【问题讨论】:

  • 常量的存在是有原因的,当您引用尚未定义的常量时,PHP 会告诉您这一事实是一件好事。它有助于防止拼写错误等,因此您可以及早发现错误。您基本上是在试图告诉您的服务器忽略 PHP 的正确响应。另一种方法是将它们定义为常量或将错误报告设置为忽略通知。
  • 没有键引号的语法只在双引号字符串上下文中有效。
  • 我会说它总是有效的,考虑到它是 php 的一个特性。一个容易出错的功能,但肯定是一个功能。否则未定义的常量就像一个未定义的变量,类型为 null。不是。

标签: apache xampp php ini


【解决方案1】:

答案是编写 PHP 的男孩子决定更改它以保持 PHP 内部的一致性,而忽略了对 PHP 程序员的可用性后果,现在你必须忍受它。因此,您面临着关闭所有通知或更新所有 PHP 定义的艰难选择。

PHP4 允许定义不带引号的常量,这没有问题。但是我将非常好的 PH4 代码导入到 PHP5 中,除了“你是一个糟糕的程序员”之外,它没有其他原因。

如果 PHP 的作者想要做一些真正有用的事情,那么在使用尚未设置的变量(即用作表达式中的左值)时如何通知。我不得不处理数百个由拼写错误的变量名引起的错误,而没有来自 PHP 的任何警告。

【讨论】:

    【解决方案2】:

    编辑您的 php.ini 以禁用通知报告。通过 phpinfo() 找到你的 php.ini

    error_reporting = E_ALL ^ E_NOTICE
    

    或者在脚本中做

    <?php
    error_reporting(E_ALL ^ E_NOTICE);
    

    还可以考虑为实时网站设置display_errors = Off。

    【讨论】:

      【解决方案3】:

      它不是恒定的,它是一个关联索引。使用引号:

      $_SERVER['SERVER_NAME'];
      

      编辑:如果这是在生产环境中,并且您只需隐藏这些消息以争取时间来纠正真正的问题,请将其添加到您的页面:

      // Turn off all error reporting
      error_reporting(0);
      

      【讨论】:

      • 另外有趣的是,谁反对我的问题,为什么?大声笑
      • 无论谁投反对票,他们从来没有放置在他们必须修复在旧版本的 xampp 中创建和运行的其他代码的位置,并且在一百个单独的文件中有数千个 unquotes 数组,应该修复一个小时,同时他们还有另一项任务要做......
      【解决方案4】:

      不要更改您的php.ini,更改您的代码:

      $_SERVER['SERVER_NAME']
      

      这也不叫调用函数。 $_SERVER 是一个关联数组

      更新

      您必须能够添加引号,隐藏这些警告是一个非常的坏主意。该警告基本上是一条消息,说“您的代码无效,但我明白了您的意思……您很幸运!”。如果您选择不使用引号,您将不会总是那么幸运。

      【讨论】:

        【解决方案5】:

        请勿更改配置以改正不良的编码习惯。这是你应该做的:

        $_SERVER['SERVER_NAME']
        

        不是这个

        $_SERVER[SERVER_NAME]
        

        您可以将错误级别设置为忽略警告,但如果这样做,您可能会错过一些其他重要警告。以正确的方式去做。

        【讨论】:

        • 我有一个项目,其中定义的所有变量都没有引号,所以我现在没有时间纠正它们。最好配置apache服务器。
        • 不,不会的,Syom。修复错误的根本原因。不要洒在补丁上以隐藏问题。
        • 我稍后会修复它。但是现在我的时间非常有限,所以我会隐藏那些通知,直到我改正它们。但在较旧的 apache 版本上,这没有问题。
        猜你喜欢
        • 2012-05-17
        • 2019-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-28
        • 2014-10-10
        • 2023-03-30
        相关资源
        最近更新 更多