修改PHP屏蔽错误,错误屏蔽

  display_errors = On      /*
PHP配置文件路径:/uer/local/php/etc/php.ini  */

A PHP Error was encountered
Severity: Notice

一般在默认的普通PHP文件中输出一个未定义声明的变量是不会报错误的,但在codeigniter框架下却要报错误,这对于想集成
添加 和 修改
页面于一体的”懒人”很不方便,由于是初学者开始还想怎么在代码中屏蔽这一错误提示呢.甚至用到了@,但听很多人都说@会大大降低性能….

  Nginx的重启:/usr/local/nginx/sbin/nginx -s reload   /* 平滑重启
*/

// Report simple running errors;报告一个简单的运行错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);

Message: Undefined variable: user

  Apache的启动:/usr/local/apache2/bin/apachectl start  /* 推荐 */

有关error_reporting()函数:

E_WARNING
通常都会显示出来,但不会中断程式的执行。这对除错很有效。例如:用有问题的常规表示法呼叫
ereg()。

1. 一般的集成环境,默认会开启错误报告;
但在linux系统中,使用软件包安装的就不一定了,

error_reporting() 设置 PHP 的报错级别并返回当前级别。

1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
E_NOTICE
表示一般情形不记录,只有程式有错误情形时才用到,例如企图存取一个不存在的变数,或是呼叫
stat() 函式检视不存在的档案。

  error_reporting(E_ALL &~ E_NOTICE);

解决办法:

  服务器上的错误报告
  依赖于 Apache 正在做的工作,在 PHP
中打开错误报告可能没法工作,因为在计算机上可能有多个 PHP
版本。有时很难区分 Apache 正在使用哪个 PHP 版本,因为 Apache
只能查看一个 php.ini 文件。不知道 Apache 正在使用哪个 php.ini
文件配置自己是一个安全问题。但是,有一种方法可以在 Apache 中配置 PHP
变量,从而保证设置了正确的出错级别。

那么如果PHP脚本不报语法错,会是什么原因呢:

// Same as error_reporting(E_ALL);同上
ini_set(‘error_reporting’, E_ALL);

PHP 的错误报告
  php.ini 文件中有许多配置设置。您应当已经设置好自己的 php.ini
文件并把它放在合适的目录中,就像在 Linux 上安装 PHP 和 Apache 2
的文档说明中所示的那样。在调试 PHP
应用程序时,应当知道两个配置变量。下面是这两个变量及其默认值:
    display_errors = Off
    error_reporting = E_ALL
  通过在 php.ini
文件中搜索它们,可以发现这两个变量当前的默认值。display_errors
变量的目的很明显 —— 它告诉 PHP 是否显示错误。默认值是
Off。但是,要让开发过程更加轻松,请把这个值设为 On:
    display_errors = On
  error_reporting 变量的默认值是
E_ALL。这个设置会显示从不良编码实践到无害提示到出错的所有信息。E_ALL
对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出。我只想看到错误和不良编码实践,但是不想看到无害的提示。所以,请用以下值代替
error_reporting 的默认值:
    error_reporting = E_ALL & ~E_NOTICE

  此时可以查看PHP配置文件,打开错误报告 =>

  重新启动 Apache,就全部设置好了。接下来,将学习如何在 Apache
上做同样的事。

您可能感兴趣的文章:

  • PHP中error_reporting()用法详解
  • PHP的error_reporting错误级别变量对照表
  • PHP函数之error_reporting(E_ALL ^
    E_NOTICE)详细说明
  • PHP中error_reporting函数用法详细介绍

复制代码 代码如下:

error_reporting(0);//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE
之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING
E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING |
E_PARSE);//显示运行时错误,与error_reporting(E_ALL ^
E_NOTICE);效果相同。error_reporting(E_ALL);//显示所有错误

  而且,最好知道如何在服务器端设置这些配置变量,以否决或抢占 php.ini
文件,从而提供更高级别的安全性。
在配置 Apache 时,应该已经接触过 /conf/httpd.conf 中 http.conf
文件中的基本配置。

     另,红帽专有启动命令:service httpd restart

在4.3.0中运行正常,在4.3.1中运行会提示Notice:Undefined varialbe:tmp_i
问题下下:
1.问题出在哪里?
2.应如何修改这段代码?
3.不改段代码,如何修改php.ini中的设置使原来在4.3.0中的程序在4.3.1的环境下运行正常?而不出现这个错误提示.

语法
error_reporting(report_level)
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level
可能的值:

  error_reporting = E_ALL;   /* 最严格的错误报告级别,
开发阶段可开启 */
  error_reporting = E_ALL &~ E_NOTICE /* 除了notice以外的错误
*/
  error_reporting = E_ERROR | E_PARSE | e_CORE_ERROR /*
只考虑致命的运行时错误,新解析错误 和 核心错误 */

  而且,最好知道如何在服务器端设置这些配置变量,以否决或抢占 php.ini
文件,从而提供更高级别的安全性。
在配置 Apache 时,应该已经接触过 /conf/httpd.conf 中 http.conf
文件中的基本配置。

A PHP Error was encountered
Severity: Notice

3. 更改配置文件以后,需要重启服务才能生效 =>

error_reporting() 设置 PHP 的报错级别并返回当前级别。

常见的如下:

     另,红帽专有启动命令:service httpd stop

Message: Undefined variable: user

  要做在php.ini文件中已经做过的事,请把下列各行添加到
httpd.conf,覆盖任何 php.ini 文件:
    php_flag display_errors on
    php_value error_reporting 2039
  这会覆盖在 php.ini 文件中为 display_errors 已经设置的标志,以及
error_reporting 的值。值 2039 代表 E_ALL & ~E_NOTICE。如果愿意采用
E_ALL,请把值设为 2047。同样,还是要重启 Apache。
  接下来,要在服务器上测试错误报告。

     另, 红帽linux专有启动命令:service httpd start

 

复制代码 代码如下:

  注:PHP脚本中动态设置error_reporting错误报告级别的方法 =>

; E_CORE_ERROR – 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING – 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR – 编译时致命性错
; E_COMPILE_WARNING – 编译时警告(非致命性错)
; E_USER_ERROR – 用户产生的出错消息
; E_USER_WARNING – 用户产生的警告消息
; E_USER_NOTICE – 用户产生的提醒消息

复制代码 代码如下:

  Apache的重启:/usr/local/apache2/bin/apachectl restart

E_PARSE 从语法中剖析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。

// Report all errors except E_NOTICE
// This is the default value set in
php.ini;报告所有的错误但不包括E_NOTICE 这也是php.ini的缺省设置
error_reporting(E_ALL ^ E_NOTICE);

  Apache的停止:/usr/local/apache2/bin/apachectl stop

下边是搜索到的一些资料:

关于error_reporting()这个函数,它是可以屏蔽到一些错误信息,但是PHP
核心造成的错误,是无法屏蔽的,因为PHP
核心造成的错误会直接导致PHP文件编译失败,因为书写格式没有按照PHP的编码规则写而造成的错误,是无法屏蔽的

  ini_set(‘display_errors’, ‘On’); /* 显示所有错误 */

语法
error_reporting(report_level)
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:

下边是搜索到的一些资料:

复制代码 代码如下:

最后突然想到,是不是codeigniter有意让这错误信息提示出来了呢,我们该如何去屏蔽掉这一类错误呢无意中搜索到了”如何让codeigniter不显示Notice信息?”,茅塞顿开.原来是入口index.php中的error_reporting(E_ALL);在作怪.只需要把它改成
  error_reporting(E_ALL ^ E_NOTICE);
就可以屏蔽掉这个错误,而不影响其他的报错.

* For now, avoid warnings of E_STRICT mode
* (this must be done before function definitions)
*/
if (defined(‘E_STRICT’)) {
$old_error_reporting = error_reporting(0);
if ($old_error_reporting & E_STRICT) {
error_reporting($old_error_reporting ^ E_STRICT);
} else {
error_reporting($old_error_reporting);
}
unset($old_error_reporting);

2. 设置错误报告级别 =>

使用方法:

// Report all PHP errors (bitwise 63 may be used in PHP
3);报告所有的错误
error_reporting(E_ALL);

  注:PHP脚本中动态设置php.ini配置文件的方法 =>

E_WARNING
通常都会显示出来,但不会中断程式的执行。这对除错很有效。例如:用有问题的常规表示法呼叫
ereg()。

E_ERROR
通常会显示出来,亦会中断程式执行。意即用这个遮罩无法追查到记忆体配置或其它的错误。

复制代码 代码如下:

在Windows环境下:原本在php教程4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undefined
varialbe:变量名称.
例如有如下的代码:
复制代码 代码如下:
if (!$tmp_i) {
$tmp_i=10;
}

// Report simple running errors;报告一个简单的运行错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);

  以上三种,推荐中间的。

或者
修改php.ini
error_reporting = E_ALL & ~E_NOTICE

E_PARSE 从语法中剖析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。

您可能感兴趣的文章:

  • PHP Undefined
    index报错的修复方法
  • phpmyadmin报错:#2003 无法登录
    MySQL服务器的解决方法
  • PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by
    peer的解决方法
  • Windows平台的 PHP 报错 Fatal error: Class COM not found in
    的解决方法
  • php使用pdo连接报错Connection failed
    SQLSTATE的解决方法
  • 解决ThinkPHP关闭调试模式时报错的问题汇总
  • ECSHOP在PHP5.5及高版本上报错的解决方法
  • thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决

E_ERROR
通常会显示出来,亦会中断程式执行。意即用这个遮罩无法追查到记忆体配置或其它的错误。

error_reporting() 设置 PHP 的报错级别并返回当前级别。

复制代码 代码如下:

PHP 的错误报告
  php.ini 文件中有许多配置设置。您应当已经设置好自己的 php.ini
文件并把它放在合适的目录中,就像在 Linux 上安装 PHP 和 Apache 2
的文档说明中所示的那样。在调试 PHP
应用程序时,应当知道两个配置变量。下面是这两个变量及其默认值:
    display_errors = Off
    error_reporting = E_ALL
  通过在 php.ini
文件中搜索它们,可以发现这两个变量当前的默认值。display_errors
变量的目的很明显 —— 它告诉 PHP 是否显示错误。默认值是
Off。但是,要让开发过程更加轻松,请把这个值设为 On:
    display_errors = On
  error_reporting 变量的默认值是
E_ALL。这个设置会显示从不良编码实践到无害提示到出错的所有信息。E_ALL
对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出。我只想看到错误和不良编码实践,但是不想看到无害的提示。所以,请用以下值代替
error_reporting 的默认值:
    error_reporting = E_ALL & ~E_NOTICE

最后突然想到,是不是codeigniter有意让这错误信息提示出来了呢,我们该如何去屏蔽掉这一类错误呢无意中搜索到了”如何让codeigniter不显示Notice信息?”,茅塞顿开.原来是入口index.php中的error_reporting(E_ALL);在作怪.只需要把它改成
  error_reporting(E_ALL ^ E_NOTICE);
就可以屏蔽掉这个错误,而不影响其他的报错.

// Report all PHP errors (bitwise 63 may be used in PHP
3);报告所有的错误
error_reporting(E_ALL);

今天学习CI框架过程中遇到个问题:

  要做在php.ini文件中已经做过的事,请把下列各行添加到
httpd.conf,覆盖任何 php.ini 文件:
    php_flag display_errors on
    php_value error_reporting 2039
  这会覆盖在 php.ini 文件中为 display_errors 已经设置的标志,以及
error_reporting 的值。值 2039 代表 E_ALL & ~E_NOTICE。如果愿意采用
E_ALL,请把值设为 2047。同样,还是要重启 Apache。
  接下来,要在服务器上测试错误报告。

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings
…);包括报告一些未初始化的变量或捕捉变量名的拼写错误
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

常见的如下:
复制代码 代码如下:
// Turn off all error reporting;关闭所有的错误
error_reporting(0);

  重新启动 Apache,就全部设置好了。接下来,将学习如何在 Apache
上做同样的事。

// Report all errors except E_NOTICE
// This is the default value set in
php.ini;报告所有的错误但不包括E_NOTICE 这也是php.ini的缺省设置
error_reporting(E_ALL ^ E_NOTICE);

// Turn off all error reporting;关闭所有的错误
error_reporting(0);

在程序开头加一句:
error_reporting(E_ALL & ~E_NOTICE); 或error_reporting(E_ALL ^
E_NOTICE);

// Same as error_reporting(E_ALL);同上
ini_set(‘error_reporting’, E_ALL);

; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。
; E_ALL – 所有的错误和警告
; E_ERROR – 致命性运行时错
; E_WARNING – 运行时警告(非致命性错)
; E_PARSE – 编译时解析错误
; E_NOTICE – 运行时提醒(这些经常是是你的代码的bug引起的,

;也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为一个
              ;空字符串的事实而使用一个未初始化的变量)

一般在默认的普通PHP文件中输出一个未定义声明的变量是不会报错误的,但在codeigniter框架下却要报错误,这对于想集成
添加 和 修改
页面于一体的”懒人”很不方便,由于是初学者开始还想怎么在代码中屏蔽这一错误提示呢.甚至用到了@,但听很多人都说@会大大降低性能….

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable
name misspellings …);包括报告一些未初始化的变量或捕捉变量名的拼写错误
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

关于error_reporting()这个函数,它是可以屏蔽到一些错误信息,但是PHP
核心造成的错误,是无法屏蔽的,因为PHP
核心造成的错误会直接导致PHP文件编译失败,因为书写格式没有按照PHP的编码规则写而造成的错误,是无法屏蔽的
复制代码 代码如下:
* For now, avoid warnings of E_STRICT mode
* (this must be done before function definitions)
*/
if (defined(‘E_STRICT’)) {
$old_error_reporting = error_reporting(0);
if ($old_error_reporting & E_STRICT) {
error_reporting($old_error_reporting ^ E_STRICT);
} else {
error_reporting($old_error_reporting);
}
unset($old_error_reporting);

1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
E_NOTICE
表示一般情形不记录,只有程式有错误情形时才用到,例如企图存取一个不存在的变数,或是呼叫
stat() 函式检视不存在的档案。

  服务器上的错误报告
  依赖于 Apache 正在做的工作,在 PHP
中打开错误报告可能没法工作,因为在计算机上可能有多个 PHP
版本。有时很难区分 Apache 正在使用哪个 PHP 版本,因为 Apache
只能查看一个 php.ini 文件。不知道 Apache 正在使用哪个 php.ini
文件配置自己是一个安全问题。但是,有一种方法可以在 Apache 中配置 PHP
变量,从而保证设置了正确的出错级别。