欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

调试PHP程序的多种方法介绍,调试php程序

程序员文章站 2022-05-12 22:37:18
...

调试PHP程序的多种方法介绍,调试php程序

调试的定义:通过一定方法,在程序中找到并减少缺陷的数量,从而使其能正常工作。
这里说一些如何调试PHP程序的经验。

一、PHP自带的调试功能

1、自带的报错功能

两个名词:开发环境是开发人员在进行开发和调试的环境,生产环境是最终客户在用的线上环境;
开发环境和生产环境要分开设置报错功能。

(1)开发环境

开发环境需要打开报错,以下是php.ini的配置项及其说明:

复制代码 代码如下:


; This directive sets the error reporting level.
; Development Value: E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.)
error_reporting = E_ALL | E_STRICT

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development.
; Development Value: On
display_errors = On

这样你在开发过程中,能第一时间发现错误。

即使是一个低等级的报错“Notice: Undefined variable: a in E:\phpspace\test.php on line 14”,但一个未定义的变量的使用往往暗藏着bug。

你会问,如果我引进了开源的类库,他们抛出一堆的低等级错误怎么办?一般代码质量好的类库,也没有“Notice”级别的报错的。所以这也是鉴别一个类库质量的方法。

(2)生产环境

生产环境不能直接将错误输出,而是记入日志,以下是php.ini的配置项及其说明:

复制代码 代码如下:


; It could be very dangerous in production environments.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
display_errors = Off

; Besides displaying errors, PHP can also log errors to locations such as a
; server-specific log, STDERR, or a location specified by the error_log
; directive found below. While errors should not be displayed on productions
; servers they should still be monitored and logging is a great way to do that.
; Production Value: On
log_errors = On

; Log errors to specified file.
error_log = /path/to/php_error.log

当然日志写到文件里只是一个选择,还有其他配置可参考手册。

生产环境是给客户提供服务的,你不可能在上面进行断点、打印输出等操作,所以日志是不错的选择。

2、其他一些语言特性、功能的使用

(1)少用错误控制运算符“@”

其的作用是,将“@”放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

如果一个缺陷发生在这个表达式中,从PHP的输出中看不到任何错误,这增加了调试的难度。所以能不用则不用。

(2)有些函数自带有debug功能

比如这行代码:

复制代码 代码如下:


$fp = fsockopen(“www.example.com”, 80, $errno, $errstr, 30);

开发者调试时已经确定,$fp为空,连接失败,是这一行有问题,但是为什么连接失败?

函数是php自带的,无法进行更深入的调试。所以一般这样的函数(主要是网络通信类的),会自己提供调试参数:$errno和$errstr。你可以加一句:

复制代码 代码如下:


if (!$fp) echo “$errstr ($errno)
\n”;

就能看到连接失败的原因了。

这些函数有:fsockopen,pfsockopen,stream_socket_server,stream_socket_client 等。

还有些函数是调试一个功能用的,比如:mysql_errno,socket_last_error,socket_strerror 等。

这些只需要了解下,碰到能想到用即可。

二、引进调试工具

在遇到复杂问题时,可以借助调试工具。比较成熟的有Xdebug、ZendDebugger。

以Xdebug为例,它能够:控制打印输出的样式和数组层级、堆栈式的追踪错误、追踪函数调用、代码执行覆盖分析、程序的概要分析(Profiling)、远程调试。详见:http://xdebug.org/docs/。

Xdebug前两个功能是对PHP原有的调试功能做了改进,更方便调试。

复杂的问题,调试不出来的,可能是业务上的的问题,下面也有说业务逻辑的调试。

三、调试业务逻辑错误

当PHP脚本跑起来,没有任何错误,只能说它没有语法上的错误,但是不能说明它业务逻辑上没错误。

很多业务逻辑的错误并不会反映在语法错误上,但调试的思路和PHP自带调试功能差不多。

下面是一些方法。

1、最基本的调试方法

先确定两个东西:程序预期的结果、程序现在的不符合预期的结果;
寻找与两种结果相关的代码片段;
阅读这些代码片段,尝试以“肉眼”找出错误;
找不出,则需要输出一些关键变量,通过检查它们的值是否正确来判断是哪里发生了错误;
若干次尝试,最终你可以确定错误发生在哪个点。

你也可以借助Xdebug等工具,查看变量值的变化,或者设置断点进行调试。

2、记录运行日志

有些复杂或特殊的业务,用上面的方法不合适,比如:一个不能被打断的后台运行脚本。这些情况下记录运行日志比较合适。

记日志的点要有所选择,除了业务上比较重要的点,通常容易出错的地方有:网络连接和通信、系统权限问题等。

3、单元测试

以代码测试代码,而不是像第一点一样调试完会把测试代码丢掉。以测试驱动开发。

这个话题比较大,但适合放这里提一下。有兴趣的同学可以去了解。

四、调试非功能性的错误

非功能性错误,比如:内存溢出导致程序挂掉了、效率有问题导致程序非常慢、死循环了等等。

这些问题,用“肉眼”检查代码效率太低了。

所以可以借助调试工具做程序的概要分析(Profiling),从中检查出程序的瓶颈所在。

怎调试php程序

如果没有一定的基础,不建议你从这类成熟的程序里学习"数据库语句的使用",成熟的程序通常会把功能相近的用法,功能封装成类,进行调用的,里面集合了各种各样的使用方法和功能,一般没有一定的基础你看懂都会有些困难
 

php程序用什调试的

目的:配置运行PHP的环境(IIS+PHP+MYSQL+CF+Perl)支持php+cgi+asp+jsp等
操作系统:windows2000 advance server(sp3)简体中文版
需要相关软件:
一:php-4.3.0-Win32.zip ,到相应站点下载,我上传文件不方便,以下同。
二:ActivePerl-5.6.1.635-MSWin32-x86.msi ,注意,必须下载安装文件,就是说.msi的,不要下原代码了,我也不会弄原代码,加装这个支持cgi,如果你不想支持cgi也可以不下载这个安装
三:mysql-4.0.7-gamma-win.zip
四:MM ColdFusion MX(有没有这个无所谓拉,我也是装着玩的,主要是支持PHP+MYSQL)

一切都以我机子上目录为标准,假定你机子上L:\WEB为你的站点根目录

将php-4.3.0-Win32.zip解压缩到L:\php目录下
复制php目录下php4ts.dll到winnt\system32目录下
复制php.ini.dist到winnt目录下,并将扩展名.dist去掉,得到php.ini文件,用记事本打开修改两个参数:
1.搜索extension_dir ,将其指向你的PHP的extensions目录,比如我是L:\PHP\extensions,我这样修改:
extension_dir = L:\PHP\extensions 这些等你想支持一些扩展库的时候可以修改extension
保存php.ini

安装mysql:
打开mysql-4.0.7-gamma-win.zip压缩包
双击setup.exe运行程序,在安装过程中注意选择mysql的安装目录(当然,你要默认目录也可以),比如我安装在L:\mysql目录下
运行L:\mysql\bin\mysqld-nt.exe ,其实一般安装完成后系统都自动启动服务了,如果不放心到“服务”看一下mysql是否启动

安装M$ Office ,不知道要不要安装这东西才支持asp我就不知道了,反正我装完系统后就全部安装office了,呵呵,估计没装也支持asp,(如果你不想它支持asp可以不去管它)

安装perl解释器:
运行ActivePerl-5.6.1.635-MSWin32-x86.msi,安装过程中选择L:\perl目录,当然你要默认也行。

装MM的ColdFusion MX,我是装到L:\ColdFusionMX目录下了

配置服务器,嘿嘿,写到这边不得不开photoshop弄图了,说不好说

点击 开始-》程序-》管理工具-》Internet 服务管理器

点击此连接观看大图

单击“默认 web 站点”,然后右键单击它,选择“属性”,打开对话框

点击此连接观看大图

单击“主目录”,做如下设置:在“本地路径”中选择你的机子上要作为站点根目录的文件夹,比如我的是L:\WEB,如下图:然后点击右下方的“配置”,弹出新的对话框

在新的对话框中选择“添加”

在可执行文件中浏览选择L:\php\sapi\php4isapi.dll,注意在浏览对话框中文件类型要选择*.dll,不然看不到L:\php\sapi\目录下的.dll文件哦,选定后在扩展名中输入.php ,如下图:

单击确定

如上方法在添加L:\perl......余下全文>>