扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关怎么对PHP程序进行调试,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
我们提供的服务有:网站建设、做网站、微信公众号开发、网站优化、网站认证、韩城ssl等。为1000多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的韩城网站制作公司一、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)、远程调试。详见:/tupian/20230522/pp>关于怎么对PHP程序进行调试就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流