没有不会犯错的开发者,PHP的错误报告功能可以协助你确认和定位这些错误,可以提供的这些错误的详细描述,但如果被恶意攻击者看到,这就不妙了。不能让大众看到报错信息,这一点很重要。做到这一点很容易,只要关闭display_errors,当然如果您希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。

由于出错报告的级别设定可以导致有些错误无法发现,您至少需要把error_reporting设为E_ALL。E_ALL | E_STRICT 是最高的设置,提供向下兼容的建议,如不建议使用的提示。

所有的出错报告级别可以在任意级别进行修改,所以您如果使用的是共享的主机,没有权限对php.ini, httpd.conf, 或 .htaccess等配置文件进行更改时,您可以在程序中运行出错报告级别配置语句:

1 <?php
2  
3 ini_set('error_reporting', E_ALL | E_STRICT);
4 ini_set('display_errors''Off');
5 ini_set('log_errors''On');
6 ini_set('error_log''/usr/local/apache/logs/error_log');
7  
8 ?>

http://php.net/manual/ini.php 对php.ini的选项配置作了详尽的说明。

set_error_handler() 函数

PHP还允许您通过 set_error_handler( ) 函数指定您自已的出错处理函数:

1 <?php
2 set_error_handler('my_error_handler');
3 ?>

上面程序指定了您自已的出错处理函数my_error_handler()。下面是一个实际使用的示例:

01 <?php
02  
03 function my_error_handler($number$string$file$line$context)
04 {
05   $error "=  ==  ==  ==  ==\nPHP ERROR\n=  ==  ==  ==  ==\n";
06   $error .= "Number: [$number]\n";
07   $error .= "String: [$string]\n";
08   $error .= "File:   [$file]\n";
09   $error .= "Line:   [$line]\n";
10   $error .= "Context:\n" . print_r($context, TRUE) . "\n\n";
11  
12   error_log($error, 3, '/usr/local/apache/logs/error_log');
13 }
14  
15 ?>

PHP 5还允许向set_error_handler( )传递第二个参数以限定在什么出错情况下执行出定义的出错处理函数。比如,现在建立一个处理告警级别(warning)错误的函数:

1 <?php
2 set_error_handler('my_warning_handler', E_WARNING);
3 ?>

PHP5还提供了异常处理机制,详见http://php.net/exceptions

PHP安全编程:不要让不相关的人看到报错信息(转)的更多相关文章

  1. PHP安全编程:不要让不相关的人看到报错信息

    没有不会犯错的开发者,PHP的错误报告功 能可以协助你确认和定位这些错误,可以提供的这些错误的详细描述,但如果被恶意攻击者看到,这就不妙了.不能让大众看到报错信息,这一点很重要.做到这一 点很容易,只 ...

  2. TNS-12532: TNS:invalid argument,Oracle的报错信息太让人无语

    TNS-12532: TNS:invalid argument,Oracle的报错信息太让人无语 现象: Tnsping报错: [oracle@unicomGZ01 admin]$ ../../bin ...

  3. linuxc语言图形化编程包含gtk/gtk.h编译总是报错找不到该文件的解决方法

    在编译时输入gcc file.c `pkg-config --libs --cflags gtk+-2.0` 注意`不是单引号,和--前均有一个字符 这样问题就结局啦

  4. 问题:eclipse中线程编程编译报错,undefined reference to 'pthread_create'的解决方法(已解决)

    问题描述: 在Ubuntu系统中,使用eclipse CDT集成开发环境编写pthread程序,编译时,pthread_create不通过,报错信息是: undefined reference to ...

  5. Arcgis engine编程报错查询(转)

    Arcgis engine编程报错查询 标签: arcgis arcengine arcgisengine 2016年04月10日 17:29:35429人阅读 评论(0) 收藏 举报  分类: Ar ...

  6. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  7. 吴恩达深度学习第4课第3周编程作业 + PIL + Python3 + Anaconda环境 + Ubuntu + 导入PIL报错的解决

    问题描述: 做吴恩达深度学习第4课第3周编程作业时导入PIL包报错. 我的环境: 已经安装了Tensorflow GPU 版本 Python3 Anaconda 解决办法: 安装pillow模块,而不 ...

  8. c/c++ 网络编程 UDP 用if_nameindex和ioctl取得主机网络信息

    网络编程 UDP 用if_nameindex和ioctl取得主机网络信息 getifaddrs函数取得的东西太多了,如果只想取得网卡名字和网卡编号可以用下面的2个函数. 1,if_nameindex ...

  9. 解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function

    Vue的项目中,如果项目简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 进行传递 但是如果是大中型项目中,很多时候都需要在不相关的平行组件之间传递数据,并且很多数据需要 ...

随机推荐

  1. topcoder算法练习2

    Problem Statement      In most states, gamblers can choose from a wide variety of different lottery ...

  2. Python直接迭代序列比通过索引迭代序列快。

    小脚本跑一下看看时间. 原理:直接迭代序列是通过Python内置的迭代器去实现的,而如果迭代序列需要先造一个可迭代的序列出来.内置的迭代器并不是一下将所有的数据放入内存中,而是需要多少取多少. #!/ ...

  3. javaScript 的option触发事件

    先说jquery的option触发事件,很方便 $("option:selected")//这样就能直接触发选择的option了 在JavaScript中就显得比较麻烦,其实< ...

  4. slice的用法与用量

    用法:slice用于从指定值截取并返回新数组,但原数组结构不变 arrayObject.slice(start,[end]) 起始值可以为负数,-1为最后一个,end选填,但取不到end坐标的值,实际 ...

  5. CentOS 6.8安装Python2.7.13

    查看当前系统中的 Python 版本 python --version 返回 Python 2.6.6 为正常. 检查 CentOS 版本 cat /etc/redhat-release 返回 Cen ...

  6. EasyUI篇のico

    所有图标位置: /themes/icons css引用位置: /themes/icon.css 可自行添加16*16的小图片放在icons中,icon.css代码添加即可 例如: .icon-logo ...

  7. MSSQL中datetime与unix时间戳互转

    //ms sql datetime 转unix时间戳 SELECT DATEDIFF(s, '19700101',GETDATE()) //ms sql unix时间戳 转datetime 涉及到时区 ...

  8. Explain语法

    EXPLAIN SELECT -- 变体: 1. EXPLAIN EXTENDED SELECT -- 将执行计划"反编译"成SELECT语句,运行SHOW WARNINGS 可得 ...

  9. 工作总结:MFC调用Windows自带新建、保存对话框代码

    保存: void CExample17Dlg::OnBnClickedSaveButton() { // TODO: Add your control notification handler cod ...

  10. android:TextAppearance.Material.Widget.Button.Inverse找不到或者报错问题

    前两天将android sdk升到android6.0后出现Error retrieving parent for Item - AppCompact-v7 23 或者无法解析 android:Tex ...