【问题标题】:php: "notice" warnings on different machinephp:不同机器上的“通知”警告
【发布时间】:2011-08-19 16:06:39
【问题描述】:

我已经在一台新机器上设置了我所有的 php 内容,我收到了很多通知警告。

我的代码在我的旧机器上正常运行,没有错误。

例如。以下行(应该获取记录集值)将导致通知: $ID = $rs[id];

原因是 id 字段缺少引号,而且像在不存在的值上调用 $_GET 这样的事情也会引起通知。

有人知道这是什么原因吗? 我喜欢在我的旧机器上保持“简单”的编码方式,而不必为记录集或大量 isset() 上的引号而烦恼 - 有什么想法吗?

谢谢

【问题讨论】:

标签: php notice


【解决方案1】:

新机器中的 PHP 安装具有更强大的配置,可以显示通知,而不仅仅是错误。那挺好的。我永远不会在我的服务器中编写或接受会引发一些通知的 PHP 脚本。

这种“懒惰”的编码(原谅我,我想帮助你!)会带来未来的问题(代码难以阅读和调试),并且间接地带来安全问题(“懒惰”的代码经常存在缺陷) .修复所有引发通知的内容。 :)

而且,如果可以的话,学习一些更高级的 PHP:学习面向对象的编程、封装、信息隐藏等……这就是现在的事情,而且比以前做得更好。围绕通知抑制和 register_globals 构建的旧 PHP 脚本有些垃圾。

【讨论】:

  • 您指的是哪种安全问题?真的那么重要吗?谢谢
  • 嗯,它不会直接带来安全问题,而是间接带来的。我从经验中看到,“惰性”代码通常也不安全,而且总是难以调试和维护。
【解决方案2】:

通知的原因是因为您有一个“未定义的常量”。如果您没有在预期的字符串周围加上引号,php 会将其视为常量。如果未定义,php 将其视为强项。举个例子:

$array = array(
   'one' => 'right'
   , 'two' => 'wrong'
);
define('one', 'two');

echo $array[one]; //echoes "wrong"

此外,如果您尝试访问未定义数组中的键(例如上面的$array['three'];),您会收到通知。 PHP 可以很好地为您执行此操作,因为其他语言会出错(或更糟)。

这些通知不仅仅是为了打扰您。它们是为了让您知道您的代码中存在您应该认真考虑解决的问题。

【讨论】:

    【解决方案3】:

    听起来您的错误报告级别因机器而异。跨机器比较 php.ini 中的error_reporting 级别。

    【讨论】:

      【解决方案4】:

      听起来您在两台服务器上设置了不同的 error_reporting 值。检查您的 php.ini 并进行相应设置。

      【讨论】:

      • 您的意思是进行相应设置,以便它始终打印任何类型的通知。不是吗??
      • Hrrm,不一定。冗长不应该总是被视为一个优点。
      • 这不是冗长的。您不应该对触发通知的 PHP 脚本感到满意,您应该通过删除通知的原因来抑制冗长。这种懒惰是 PHP5 之前的遗留问题,应该根除 :)
      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 2010-12-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多