[128][1/13][1][2][3][4][5][6][7][8][9][10][>|] | 到页尾
类别:[PHP心得]  时间: 2008-05-16 20:04:48; 浏览: 19; 评论: 0  

  PHP在页面上显示出错消息并让用户看见是开发人员怎么样也不愿意面对的,但是谁都不想在一台没有配置成显示出错消息的服务器上用PHP开发代码。开发时显示PHP的错误消息对开发人员来说是个明智的选择,所谓工具是使人方便的,就是如此。

  下面来说说显示PHP错误提示消息的三个方法。

  一:php.ini配置

  php.ini配置中与此相关的有两个配置变量。下面是这两个变量及其默认值:

以下是引用片段:
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE

  display_errors 变量的目的很明显 —— 它告诉PHP是否显示错误。默认值是 Off。现在我们的目的是显示错误提示,那么:

以下是引用片段:
display_errors = On

  E_ALL,这个设置会显示从不良编码实践到无害提示到出错的所有信息。E_ALL 对于开发过程来说有点太细,因为它连变量未初始化也显示提示,而这一点正是PHP“高级”的一个特征。幸好,error_reporting的默认值是“E_ALL & ~E_NOTICE”,这样就只看到错误和不良编码了,对程序无不利的提示则不会显示。

  修改php.ini后需要重新启动Apache,这样才可以在apache中生效,当然你如果只在命令行下测试程序,是不需要这一步的。

  二:Apache的httpd.conf和.htaccess配置

  如果要在.htaccess 文件中的指令来修改 PHP 的配置设定。需要有“AllowOverride Options”或“AllowOverride All”权限才可以。 请参见:AllowOverride 指令http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#allowoverride

  AllowOverride指令确定允许存在于.htaccess文件中的指令类型,它仅在不包含正则表达式的配置段中才是有效的。

  如果此指令被设置为None ,那么.htaccess文件将被完全忽略。事实上,服务器根本不会读取.htaccess文件。

  当此指令设置为 All时,所有具有".htaccess"作用域的指令都允许出现在.htaccess文件中。

  例如以下指令只允许在.htaccess中使用AuthConfig和Indexes组的指令:

以下是引用片段:
AllowOverride AuthConfig Indexes

  .htaccess里的设置和httpd.conf是一样的。

  要在做在httpd.conf实现这一功能,需要把下列各行添加到 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。

  httpd.conf对php宏定义设置的具体用法可以参见:http://www.php.net/manual/zh/configuration.changes.php

  你可以注意到,上面我们没有使用“E_ALL & ~E_NOTICE”这样的宏定义。这是因为这些宏定义都是php的变量,apache是不认识的,所以我们使用与其等同的值来设置。相关的信息和说明请见:http://www.php.net/manual/zh/ref.errorfunc.php#errorfunc.constants

  下面给出一个简单的对应值:

以下是引用片段:
值 宏定义
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 
6143 E_ALL 
2048 E_STRICT 
4096 E_RECOVERABLE_ERROR

  三:程序中改变

  以上所介绍的都是配置文件里面做设置,如果你没有这个权限,或者只想测试一个程序,那么你可以使用两个函数来做到这一点。

  它们分别是:

以下是引用片段:
string ini_set ( string $varname , string $newvalue )

int error_reporting ([ int $level ] )

  两个函数大同小异,error_reporting()看上去是ini_set()的error_reporting功能版。事实上我认为也的确如此。

  在ini_set()中你可以设置display_errors和error_reporting的值,而在error_reporting()中你只能设置error_reporting的值,也就是说,如果服务器默认不显示错误提示,你在error_reporting()中怎么变换都是不管用的。两个函数的参数都可以参见上面提到的数字--宏定义对应值。

  需要注意,以上两个函数的适用用时间为该函数起,一直到程序结束。它们不会影响到其他的程序。

  最后:关于PHP的宏定义

  最后,仍需要说明一点:无论httpd.conf还是ini_set()所设置的宏定义并不是无限的,更多的宏定义值请参看手册中的“php.ini 配置选项列表”:http://www.php.net/manual/zh/ini.php

  在里面列表中有一列为“可修改范围”,里面的值为PHP_INI_* ,所以在使用时需要看清宏定义的可修改范围。在列表的末尾,手册中有提示:

以下是引用片段:
PHP_INI_* 常量的定义
常量 值 含义
PHP_INI_USER 1 配置选项可在用户的 PHP 脚本或 Windows 注册表中设置
PHP_INI_PERDIR 2 配置选项可在 php.ini, .htaccess 或 httpd.conf 中设置
PHP_INI_SYSTEM 4 配置选项可在 php.ini or httpd.conf 中设置
PHP_INI_ALL 7 配置选项可在各处设置

  本文参考资料:

以下是引用片段:

PHP 程序员的调试技术
http://www.ibm.com/developerworks/cn/opensource/os-debug/

AllowOverride 指令
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/core.html#allowoverride

怎样修改配置设定
http://www.php.net/manual/zh/configuration.changes.php

php.ini 配置选项
http://www.php.net/manual/zh/ini.php

运行时配置
http://www.php.net/manual/zh/ref.errorfunc.php#ini.error-reporting

ini_set()
http://www.php.net/manual/zh/function.ini-set.php

error_reporting()
http://www.php.net/manual/zh/function.error-reporting.php

display_errors
http://www.php.net/manual/zh/ref.errorfunc.php#ini.display-errors

预定义常量
http://www.php.net/manual/zh/ref.errorfunc.php#errorfunc.constants

类别:[随便说说]  时间: 2008-04-30 14:51:49; 浏览: 78; 评论: 1  

  有时候只好坚持。

  有时候只需要坚持。

  最感动的是小孩子回答的““嗯,我继续唱歌””。

类别:[随便说说]  时间: 2008-04-18 15:36:17; 浏览: 92; 评论: 0  

  从“做人不能太CCTV”到“做人不能太CNN”。

http://vhead.blog.sina.com.cn/player/outer_player.swf?auto=1&vid=12417440&uid=1401913474

类别:[随便说说]  时间: 2008-04-17 13:11:24; 浏览: 109; 评论: 0  
类别:[Linux/Unix]  时间: 2008-04-15 18:18:19; 浏览: 134; 评论: 0  
类别:[PHP心得]  时间: 2008-04-10 18:42:02; 浏览: 134; 评论: 1  
类别:[Linux/Unix]  时间: 2008-04-03 15:35:46; 浏览: 151; 评论: 0  
类别:[Linux/Unix]  时间: 2008-03-29 22:56:08; 浏览: 125; 评论: 1  
类别:[PHP心得]  时间: 2008-03-28 13:01:35; 浏览: 175; 评论: 1  
类别:[随便说说]  时间: 2008-03-22 13:23:50; 浏览: 141; 评论: 0  
[128][1/13][1][2][3][4][5][6][7][8][9][10][>|] | 回页首
BBS 登 录
昵 称 :
密 码 :
   [注册]
芽雨关注
您是否也关注这些?
  不畏浮云遮望眼
    皇甫平:圣火灼痛两个民族两种文化
  《Zend权威认证试题讲解》PDF整理版
    《Zend权威认证试题讲解》的中文版译文
  再见了,YAHOO中国
    企业合并之痛;做自己有核心力的东西
  美国互联网人的思路为何与大陆恰恰相反
    可以说其中国竞争对手的网站的发展是完全抛弃这些美国网站的经验做法才成功的,甚至要和这些美国网站“倒着做”才成功的。
  RSS 2.0 内容提要
    本文回顾 RSS 2.0,考察了 RSS 的新发展,帮助您迅速理解这种重要的格式。
  /var/spool/clientmqueue 下生成太多文件处理
    /var/spool/clientmqueue/与ls | xargs rm -f
  服装尺码常识
    各个地方型号太不统一了
  给愤青读一读祖师爷的话
    洋兵一到,一哄而走,割地赔款,一概不管,这是野蛮排外的办法。若是有爱国的心肠,这野蛮排外,断断不可行的。
  面对西方:中国人的17个自问
    我们是否还能从美国文化的围猎中突围,作一次冷静的自省呢?
  关于抵制法国货
    张朝阳所著,是个敢说的人
© 2004 - 2008 芽雨快跑 - 本页面所有内容,未经芽雨许可,欢迎转载,请注明出处
晋ICP备07004439号
我要报警