定位错误位置

  对于每一个编程人员来说,如果自己的程序报错,那么简单的浏览一下错误信息就能大致明白错误原因及错误位置,即使一时间无法确定,但是经过简单的分析也能很快得出结论,这对于个人来说是非常方便的,但是,在某些时候我们要修改的并不是自己的代码,这个时候如果要是从都到尾的去理解一遍他人的代码,这样的话就是有点浪费时间了,所以如何快速定位就是非常重要了。

  首先来说,对于PHP编程有一个非常好用的函数可以帮助我们定位错误信息,避免给用户提供不友好的交互体验。

  1、网站的问题排查主要看日志,因为线上的网站一般不会开启调试模式,所以调试的话只能看日志

  2、网站优化主要看请求的资源次数和请求的响应时间,如果响应时间太长就要看是不是数据库的请求多,或者数据库响应慢,首先看sql执行次数和每条sql的执行时间,找出慢查询解决问题

  3、可以使用PHP扩展工具Xdebug进行调试:http://www.jb51.net/article/38780.htm

  4、PHP中有一个叫做  register_shutdown_function 的函数,当我们的脚本执行完成或意外中断停止导致PHP即将关闭时,此函数会被调用。所以,我们可以使用在脚本开始处设置一个变量为false,然后在脚本末尾将之设置为true的方法,让PHP关闭回调函数检查脚本完成与否. 如果我们的变量仍旧是false,我们就知道脚本的最后一行没有执行,因此它肯定在程序执行到某处中断停止。你可以通过关闭致命错误的显示(译注:可以设置display_errors和 error_reporting),让例子看起来好看些.

<?php
$clean = false;
function shutdown_func(){
global $clean;
if (!$clean){
die("not a clean shutdown");
}
return false;
}
register_shutdown_function("shutdown_func");
$a = 1;
$a = new FooClass(); // 将因为致命错误而失败
$clean = true;
?>

正如所看到,如果关闭回调函数运行时,clean变量没有被设为true,shutdown_func函数将会打印出一些东西.这个东西可以包装成一个类(不使用全局变量).
PHP提供register_shutdown_function()这个函数,能够在脚本终止前回调注册的函数,也就是当 PHP 程序执行完成后执行的函数。
register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。注意,在这个时候从内存中调用,不是从PHP页面中调用,所以上面的例子不能使用相对路径,因为PHP已经当原来的页面不存在了。就没有什么相对路 径可言。
注意:register_shutdown_function 是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时,代码执行存在异常和错误、警告

原文:http://www.jb51.net/article/37815.htm

posted @ 2016-10-16 09:26  蚂蚁力量  阅读(1076)  评论(0编辑  收藏  举报