摘要:前言:这里的调试方法是指找错误,和分析错误的方法。 测试代码最好打开php错误报告,方法有两种一种是在php.ini里面设置。另外一种是使用函数error_reporting。打开php.ini找到error_reporting修改成error_reporting = ALL;当然我们当初是拷贝的开发那份,所以是默认打开的,如果你的关闭了只要修改这里就好了。reporting也有等级区分。以
前言:这里的调试方法是指找错误,和分析错误的方法。
测试代码最好打开php错误报告,方法有两种一种是在php.ini里面设置。另外一种是使用函数error_reporting。打开php.ini找到error_reporting修改成error_reporting = ALL;当然我们当初是拷贝的开发那份,所以是默认打开的,如果你的关闭了只要修改这里就好了。reporting也有等级区分。以后在介绍php.ini的时候详细介绍。
另外如果命令行模式我们一般会加上
在命令行下试试下面的代码吧
将这段代码保存到d:/www/test/a.php然后到cmd中运行php d:/www/test/a.php看看效果吧
php调试
错误1语法错误:这类错误最容易定位,无论是web程序还是命令行程序,都会给出出错的行,然后你根据出错的行去修改调试,直到正确。还记得emacs C+c r今天再教大家一个C+c d 修改.emacs文件在以下代码的上方
加入
在(define-key php-mode-map [(control c) (r)] ‘php-run)下一行加入(define-key php-mode-map [(control c) (d)] ‘php-debug)
然后重启emacs打开一个php文件输入<?php echo “我是个错误的示范” echo ;?>试试C+c d吧是否提示错误啦。
错误2没有运行:这类错误是指运行过程中中断了,调试这类错误我通常是在有可能出错的地方前后加入echo “num”;比如如下代码
也许你对&&理解有误导致了这个问题,上面的代码将输出13而2没有输出所以是if判断有问题。
错误3算法错误:这类错误简而言之就是结果和你预期不符合,这样的错误比较难找原因。你需要清晰的逻辑,首先你要知道每一行代码对运算结果的影响,一行一行的输出看看哪一行输出不是预期结果。
二、输出输出单行用echo,print。为了输出美观点,一般在命令行模式比如你在用C+c r调试的时候一般在后面跟着输出”n”比如<?php echo “测试输出n”;echo “测试输出n”;?>而在web调试的时候输出”<br />”比如<?php echo “测试输出<br />”;echo “测试输出<br />”;?>
输出其他类型可以用var_dump、print_r、var_export,当然这些函数也可以打印字符串,只是多打几个字母而已。其中var_dump和var_export类似只是打印出数组或对象的字符串形式,而var_dump还会打印出变量的类型,而print_r打印出的内容更容易阅读。试试下面的代码吧。
上例中的最后三行,显示了几种常见用法。即字符串中有和包裹字符串的引号相同时使用反斜杠来区分比如”我是”双引号”" ’\'我是单引号”,如果单引号和双引号混用时要注意包裹范围。字符串和字符串之间用.来链接。
这里告诉大家一个更加实用的函数
这样在web输出的时候也能够容易读一点只要把这段代码放到要运行的php之前即可。
为了调试方便一般会再输出后面加上exit;让代码停止运行。
三、区别正式环境和测试环境有时候需要正式环境和测试环境内容不同,一个方法是在apache收到请求的时候就在环境里面告诉php是测试环境还是正式环境。就是在虚拟主机里面配置SetEnv ENV “dev”在php代码中可以用$_SERVER[\'ENV\']取得dev这个值当然ENV和dev都是自定义的。这样就可以区分是什么环境了。
另外有时候你想再正式环境运行代码,但是又不能让普通用户看到你的测试代码怎么办呢。可以在地址后面加?__DEBUG__=1来区分,因为普通用户浏览的时候不会知道还有这个参数。而你可以用$_GET[\'__debug__\']==1来判断是不是测试用的。当然__DEBUG__ 和 1是自定义的,你可以选任何你知道。
相关文章推荐
虚拟主机的专业参数,分别都是什么意思?2022-09-09
中非域名注册规则是怎样的?注册域名有什么用处? 2022-01-10
HostEase新年活动促销 美国/香港主机全场低至五折2021-12-28
HostGator下载完整备份教程分享2021-12-28
Flink中有界数据与无界数据的示例分析2021-12-28