php调试与优化的小技巧

上传人:大米 文档编号:432767621 上传时间:2023-03-21 格式:DOCX 页数:15 大小:712.40KB
返回 下载 相关 举报
php调试与优化的小技巧_第1页
第1页 / 共15页
php调试与优化的小技巧_第2页
第2页 / 共15页
php调试与优化的小技巧_第3页
第3页 / 共15页
php调试与优化的小技巧_第4页
第4页 / 共15页
php调试与优化的小技巧_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《php调试与优化的小技巧》由会员分享,可在线阅读,更多相关《php调试与优化的小技巧(15页珍藏版)》请在金锄头文库上搜索。

1、PHP程序员的优化调试技术和技巧本文介绍调试PHP应用程序的各种方法,包括在Apache and PHP中打开错误报告,以及 通过在一个简单的PHP脚本中放置策略性的print语句,找到更困难的bug的源头。还 会介绍用于Eclipse的PHPEclipse插件,这是一个灵活的开发环境,具有实时语法解析 能力,还会介绍PHPEclipse的DBG调试器扩展。简介有许多PHP调试技术可以在编码的时候节约大量时间。一个有效却很基本的调试技术 就是打开错误报告。另一个略微高级一点的技术包括使用print语句,通过显示在屏幕上 实际出现的内容,有助于精确地找出更难发现的bug0 PHPEclipse是

2、一个 Eclipse插件,能够强调常见的语法错误,可以与调试器结合起来用于设置断点。设置要学习本文描述的概念,需要PHP、Web服务器和Eclipse。调试器扩展支持的PHP版 本是 V5.0.3。我们需要一个Web服务器来解析用PHP创建的页面并把它们显示到 浏览器。本文中使用的是Apache2o但是,任何Web服务器都可以满足要求。要利用本文中介绍的一些调试技术,需要安装Eclipse V3.1.1和插件PHPEclipse V1.1.8。由于Eclipse要求Java?技术,所以还要下载它。还需要PHP的调试器扩展模块。安装它略有些麻烦。请仔细跟随安装调试器扩展的操 作说明。现在,先在p

3、hp.ini文件中注释掉那些要求装入和配置PHP扩展的行。在需要使 用调试器的时候,再取消注释。请参阅 参考资料 获得下载信息。现在介绍出错消息。出错消息出错消息是作为开发人员的第一道防线。谁都不想在一台没有配置成显示出错消息的 服务器上用PHP开发代码。但是,请记住,当代码调试完成,准备运行的时候,应当确保 关闭了错误报告,因为不希望站点的访问者看到出错消息,因为这会给他 们提供足够的信息来利用站点的弱点并黑掉站点。也可以用出错消息为自己服务,因为它们会显示抛出或生成错误的正确代码行。这样, 调试就变成在浏览器上查看生成的错误所显示的行号,并在代码中检查这一行。稍后,将 会看到PHPEcli

4、pse插件通过即时地给语法错误加下划线并在保存文件时用红色“x”标 注语法错误,可在开发和调试过程中提供极大的帮助。先来看如何在php.ini文件中开 迷宗蟹启错误报告并设置错误报告的级别。然后将学习如何在 Apache的配置文件中覆盖这些设置。PHP的错误报告php.ini文件中有许多配置设置。您应当已经设置好自己的php.ini文件并把它放在 合适的目录中,就像在Linux上安装PHP和Apache 2的文档说明中所示的那样(请参阅 参考资料)。在调试PHP应用程序时糖果棋牌,应当知道两个配置变量。下面是这两个变量及其默认值:display_errors = Off error_repor

5、ting = E_ALL通过在php.ini文件中搜索它们,可以发现这两个变量当前的默认值display_errors 变量的目的很明显一一它告诉PHP是否显示错误。默认值是Off。但是,要让开发过程 更加轻松,请把这个值设为On:display_errors = Onerror_reporting变量的默认值是E_ALL。这个设置会显示从不良编码实践到无害提示 到出错的所有信息。E_ALL对于开昆山搬家公司发过程来说有点太细,因为它在屏幕上为一些小事(例如变 量未初始化)也显示提示,会搞糟浏览器的输出。我只想看到错误和不良编码实践,但是不 想看到无害的提示。所以,请用以下值代替error_r

6、eporting的默认值:error_reporting = E_ALL & E_NOTICE重新启动Apache,就全部设置好了。接下来,将学习如何在Apache上做同样的事。服务器上的错误报告依赖于 Apache 正在做 昆山空调维修www.ks-的工作,在PHP中打开错误报告可能没法工作,因为在 计算机上可能有多个PHP版本。有时很难区分Apache正在使用哪个PHP版本,因为Apache只能查看一个php.ini文件。不知道Apache正在使用哪个php.ini文件配置自 己是一个安全问题。但是,有www.ks-一种方法可以在Apache中配置PHP变量,从而保证设置了正确的出错级别。

7、而且,最好知道如何在服务器端设置这些配置变量,以否决或抢占php.ini文件,从 而提供更高级别的安全性。在配置 Apache 时,应该已经接触过 /conf/httpd.conf 中 http.conf文件中的基本配置。要做在php.ini文件中已经做过的事,请把下列各行添加到httpd.conf,覆盖任何 php.ini 文件:php_flag display_errorsonphp_value error_reporting2039这会覆盖在php.ini文件中为display_errors已经设置的标志,以及 error_reporting的值。值2039代表E_ALL & E_NOT

8、ICE。如果愿意采用E_ALL,请把值 设为2047。同样,还是要重启Apache。接下来,要在服务器上测试错误报告。测试错误报告如果启动了错误报告,会节约许多时间。PHP中的错误会指向代码中的错误。请创建一 个简单的PHP文件test.php,并像清单1所示一样定义它。清单1. 一个生成错误的简单PHP?phpprint(The next line generates an error.); printaline(PLEASE?);print(This will not be displayed due to the above error.); ?第一个print()语句会向Web浏览器显

9、示它的内容。但是第二个语句会生成错误并在 Web页面上显示。这造成最后一个print()语句不起作用,如图1所示。 3 ISBMk叫顽iirtameFm Edt 也e此佥匏grits Tools 安mdow 拒phttD:/;ueActKJe/twt.pho 二Sw*th 劣 , ,pftfl!jBaSkmarfa 4 Utah Ccmnindv Cr&.Yahoo! # &Kgtc MSN.&m /fFMdangb -ECEN 625The next lint generates an error.F制由 error: Call to undtlined function prujraiji

10、fQ in C :Ann dcbucArrickr.php on line 3现在开启了错误报告!接下来,用print语句帮助调试应用程序。介绍print语句因为应用程序中的功能性bug不会产生错误,所以在所有调试策略中,关于如何正确 地放置和使用print或die语句来调试PHP应用程序的知识是一种很好的资产。可以用 print语句在代码中缩小对问题语句的定位,这些语句在语法上没有错误,也不是bug,但 是从代码的功能上看是bug。这些是最难发现和调试的bug,因为它们不会抛出错误。惟一 知道的就是在浏览器上显示的内容不是想要的内容,或者想要保存在数据库中的内容根本没 有保存。假设正在处理通

11、过GET请求发送过来的表单数据,想向浏览器显示信息,但是出于某 种原因,数据没有正确地提交,或者不能正确地从GET请求中读出。要调试这类问题,重 要的是用print()或die()语句知道变量的值是什么。die()语句会中止程序执行,并在Web浏览器上显示文本。如果不想注释掉代码,而 且只想显示到出错之前的信息和出错信息,不想显示后面的信息,那么die()语句特别有 用。让我们在PHP中用print语句来测试这个概念使用print语句进行调试在我作程序员的那些时候,当我在Linux?上开发应用程序时,没有方便的GUI可以 告诉我bug在哪,我迅速地发现我在程序中放的print语句越多,我在应用

12、程序中把bug 的范围缩小到一行的机会越大。请创建另一个PHP文件test2.php,并像清单2所示的那 样定义它。清单2.显示通过GET提交的所有变量?php$j =;print(Lets retrieve all the variables submitted to this );print(script via a GET request:);foreach($_GET as $key = $i)print($key=$j);if($_GETSubmit = Send GET Request)$j = done!;?Name: Email: 您可能会非常容易地发现清单2中的bug !您很

13、棒!但请注意这是一个非常简单的脚 本,只是作为使用print语句进行调试而展示的一个例子而已。这个脚本只是提取GET请 求中的所有变量,如果有,就把它们显示在浏览器上。还提供了一个表单,用GET请求向 服务器发送变量以进行测试。请看输出,如图2所示。图2. test2.php的输出现在单击Send GET Request按钮,请注意只有$_GET请求的键显示在浏览器上,而 正确的值都没显示。可以在循环中放一个print语句,检验在foreach循环中每个元素中 是否确实存在数据。请参阅清单3。清单3.用print语句验证代码的功能foreach($_GET as $key = $i)print

14、(Correct data? . $_GET$key . br);print($key=$jbr);放进去的print语句是粗体。注意,现在已经知道在Web浏览器上显示的$key值是 正确的,但是由于某些原因,值没有正确地显示。请看新的输出,如图3所示。图3.修改后的test2.php的输出现在已经知道应用程序正确地从GET请求接收到了变量,那么肯定是在代码中有 bug。查看之后注意到,用来显示值的变量$j是错误的。在foreach语句中指定的是$i, 所以它肯定会有正确的值,但是无意之中输入了 $j。所以通过把$j替换成$i,迅速地修 正了错误,重新载入页面之后,就看到了正确的输出,如图4所示。图4.修正后的test2.php的输出现在可以删除或注释掉刚才添加的print语句了,因为已经发现了代码中的bug。注 意,这只是在调试应用程序时可能遇到的许多错误中的一个很小的子集。对于使用数据库时 可能遇到的问题,一个好的解决方案是输出SQL语句,以确保执行的SQL就是想要执行的。现在要来看看如

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号