前言:这里的调试方法是指找错误,和分析错误的方法。 php
测试代码最好打开php错误报告,方法有两种一种是在php.ini里面设置。另一种是使用函数error_reporting。打开php.ini找到error_reporting修改为error_reporting = ALL;固然咱们当初是拷贝的开发那份,因此是默认打开的,若是你的关闭了只要修改这里就行了。reporting也有等级区分。之后在介绍php.ini的时候详细介绍。 web
另外若是命令行模式咱们通常会加上 算法
1 |
set_time_limit(0); // 取消php的运行时间限制,让程序能够长时间运行 |
2 |
ini_set('memory_limit','512M'); //根据须要设置所须要的最大内存数量通常用用不须要设置这行在须要大内存的时候设置下 |
3 |
ob_end_flush();//刷新缓冲区运行到哪里显示到哪里,可是在emacs中没法实现,在命令行中能够 |
在命令行下试试下面的代码吧 shell
04 |
ini_set('memory_limit','512m'); |
将这段代码保存到d:/www/test/a.php而后到cmd中运行php d:/www/test/a.php看看效果吧 apache
php调试 数组
1、错误定位
错误1语法错误:这类错误最容易定位,不管是web程序仍是命令行程序,都会给出出错的行,而后你根据出错的行去修改调试,直到正确。还记得emacs C+c r今天再教你们一个C+c d 修改.emacs文件在如下代码的上方 函数
1 |
(define-key php-mode-map |
3 |
'("Run PHP" . php-run)) |
加入 测试
01 |
(define-key php-mode-map |
02 |
[menu-bar php php-debug] |
03 |
'("PHP Debug" . php-debug)) |
08 |
(concat "C:/php/php.exe -f \"" |
在(define-key php-mode-map [(control c) (r)] ‘php-run)下一行加入(define-key php-mode-map [(control c) (d)] ‘php-debug) spa
而后重启emacs打开一个php文件输入<?php echo “我是个错误的示范” echo ;?>试试C+c d吧是否提示错误啦。 .net
错误2没有运行:这类错误是指运行过程当中中断了,调试这类错误我一般是在有可能出错的地方先后加入echo “num”;好比以下代码
也许你对&&理解有误致使了这个问题,上面的代码将输出13而2没有输出因此是if判断有问题。
错误3算法错误:这类错误简而言之就是结果和你预期不符合,这样的错误比较难找缘由。你须要清晰的逻辑,首先你要知道每一行代码对运算结果的影响,一行一行的输出看看哪一行输出不是预期结果。
2、输出
输出单行用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打印出的内容更容易阅读。试试下面的代码吧。
03 |
$arr = array(1,array(2,3,"我是数组的一部分")); |
26 |
echo "我有连接符"."我是被连接的字符串"; |
上例中的最后三行,显示了几种常见用法。即字符串中有和包裹字符串的引号相同时使用反斜杠来区分好比”我是\”双引号\”" ’\'我是单引号\”,若是单引号和双引号混用时要注意包裹范围。字符串和字符串之间用.来连接。
这里告诉你们一个更加实用的函数
3 |
echo '<pre style="text-align:left;">'; |
这样在web输出的时候也可以容易读一点只要把这段代码放到要运行的php以前便可。
为了调试方便通常会再输出后面加上exit;让代码中止运行。
3、区别正式环境和测试环境
有时候须要正式环境和测试环境内容不一样,一个方法是在apache收到请求的时候就在环境里面告诉php是测试环境仍是正式环境。就是在虚拟主机里面配置SetEnv ENV “dev”在php代码中能够用$_SERVER['ENV']取得dev这个值固然ENV和dev都是自定义的。这样就能够区分是什么环境了。
另外有时候你想再正式环境运行代码,可是又不能让普通用户看到你的测试代码怎么办呢。能够在地址后面加?__DEBUG__=1来区分,由于普通用户浏览的时候不会知道还有这个参数。而你能够用$_GET['__debug__']==1来判断是否是测试用的。固然__DEBUG__ 和 1是自定义的,你能够选任何你知作别人不知道的字符串来测试。
本文固定连接: http://www.qaforcode.net/archives/172 | 猪哥每日一贴