(>>>>在公众号中输入文章最后彩蛋即可获取源代码)
一、实验目的
1、掌握微信开发PHP调试技巧。
二、实验内容
1、利用程序调试追踪工具PHPLog php调试程序。
2、使用die()/exit()命令。
3、使用var_dump()和print_r()命令。
4、使用Eclipse Php Neon开发环境的调试工具。
三、实验步骤及过程
学会调试程序是开发的重要内容,PHP调试不如其它的工具调试,特别是web网站的交互,当前PHP开发工具难以实现(如果有其它的PHP开发调试工具,希望能够在微信公众号“豆豆咨询”里留言)。
本实验采用不同的方法实现PHP调试。程序执行的过程中,在相应的地方记录你想要追踪的变量及调用栈和每次函数调用的参数。
1、使用PHPLog php调试工具。
PHPLog php调试工具是邓志义在2009/08/23于广州书写,我们修改了部分内容(在”豆豆咨询”公众号源程序下载中可以看到修改的内容)。
a.拷贝phplog.php文件:把phplog.php文件放到你的站点目录下。
b.编辑phplog.php文件:用编辑器打开phplog.php,定位到20行,设定好你个人的配置。
c.浏览phplog.php文件:在浏览器中打开phplog.php,你就可以看到一些相关的信息及帮助说明。例如在浏览器中输入如下网站地址信息http://78976932.tunnel.2bdata.com/ThinkPHP/public/phplog.php,我们将看到如下信息:
d.编辑想要调试的PHP文件:使用编辑器打开你的PHP文件,例如PHPDebug.php文件,在PHPDebug.php文件中使用phplog.php中的__log函数记录你想要记录的变量、对象以及其他相关的调试信息。例如:
l在PHP文件顶部输入:require '../phplog.php';
l在程序其他地方输入编码:__log('Hello豆豆');
e.运行调试的PHP文件:在浏览器中输入网址信息,例如http://78976932.tunnel.2bdata.com/ThinkPHP/public/weixin/PHPDebug.php,将运行PHP文件,phplog.php将记录调试信息在相同目录下的文件中,例如2017-04-11.log文件。
f.查看和编辑运行结果:在浏览器中输入地址,浏览调试文件,如http://78976932.tunnel.2bdata.com/ThinkPHP/public/phplog.php,这时运行phplog.php,可以看到调试的信息。而且,你还可以查看、编辑调试信息:在你的浏览器里访问phplog.php,将看到你刚才记录的信息及它的调用栈和参数。当你通过浏览器访问运行phplog.php程序时,该程序会把整个文件读取分析,在页面显示你的所有调试信息,并且它会动态ajax刷新。
注意:请不让log文件超过5M大小,浏览器可能会崩溃的。
2、使用die()/exit()命令。
die()/exit()函数都有终止线程的作用,应该是等价的,它们是php断点调试需要使用的最主要的函数,它们也是php程序员使用非常频繁的函数。die()函数一般与“or”一并使用,写作“or die()”,经常看到这样的语句:
$file = fopen($filename, 'r') or die("抱歉,无法打开: $filename")
解释:如果fopen函数执行失败,就会返回false,那么就会执行die(),程序则会停止执行,并且显示指定出错信息,以此达到调试目的。
具体实例:
$site = "http://www.google.com/";
fopen($site,"r") or exit("Unable to connect to$site");
?>
或者
$site = "http://www. google.com/";
fopen($site,"r") or die("Unable to connect to$site");
?>
你将看到“Unable to connect tohttp://www.google.com/”信息。
3、使用var_dump()和print_r()命令。
1)var_dump --打印变量的相关信息
void var_dump ( mixed expression [, mixed expression [, ...]] )
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。例如以下代码将输出变量:
$a =array(1, 2,array("a","b","c"));
var_dump($a);
$b = 3.1;
$c =TRUE;
var_dump($b,$c);
?>
2)print_r --打印关于变量的易于理解的信息
bool print_r ( mixed expression [, bool return] )
a.print_r()显示关于一个变量的易于理解的信息。如果给出的是string、integer或float,将打印变量值本身。如果给出的是array,将会按照一定格式显示键和元素。object与数组类似。
例如:
$a = array ('a' => 'apple',
'b' => 'banana',
'c' => array ('x','y','z'));
print_r ($a);
?>
将输出:
Array ( [a] => apple [b] => banana [c]=> Array ( [0] => x [1] => y [2] => z ) )
b.print_r(,true):如果想捕捉print_r()的输出,可使用return参数。若此参数设为true,print_r()将不打印结果(此为默认动作),而是返回其输出。
例子:return参数示例
$b = array ('m' => 'monkey',
'foo' => 'bar',
'x' => array ('x', 'y', 'z'));
$results = print_r ($b, true);
//$results包含输出结果
?>
4、使用Eclipse Php Neon开发环境的调试工具。
安装集成开发环境,Eclipse Php Neon新建项目,然后添加PHP文件,采用Debug as/ PHP CLI Application进入调试环境,调试器XDebug采用WAMP工具包安装的php.exe,如上图所示。我们可以其他集成开发工具一样,进入断点调试环境。但有一个缺点,即当用户访问网页时,调试环境不能与其同步,与visual studio有一定的差距。希望未来能够增加这个功能,实现与用户的直接交互调试。
四、技术服务
1、如果有疑问或者需要帮助,请加入QQ群(群名称:豆豆咨询,群号:625686304);或者公众号douAsk,公众号名称为“豆豆咨询”。扫描以下二维码,关注“豆豆咨询”。
、
在“豆豆咨询”公众号中输入以下彩蛋号,将获取源代码:
彩蛋号:1204。