建站三人行

当前位置: 主页 > PHP >

TP变量调试插件的简介

时间:2010-02-03 16:15来源:原创 作者:LovePHP 点击:
因为在用THINKPHP框架的过程中,开发人员会遇到各种问题,有框架导致的问题,也有自己写的代码导致的问题,用一些专门的调试器像 Visual Studio 相联系的VS.PHP 都不好用,我也不想去装

该调试插件由 “建站三人行”的站长提供, 首页网址是:http://zenglong.w230215.fxdns.cn
   联系方式:QQ:672440905 O(∩_∩)O email: s499068735@163.com
   站长在 首页的圈子栏目里设立了TP调试心得的圈子,可以在里面讨论TP插件相关的问题。
   或者可以 通过问答栏目 提问,站长会在看到后回复。
   如果是以游客的身份,那么可以在线留言。DEDECMS的互动功能还是很强大的!
  站长以前建了个QQ群,是个普通群,63471870   群名字:PHP之家编程爱好者 。现在还没几个人(因为以前的群名字叫光 棍一族,把人都喝跑了!)站长刚刚加入了ThinkPHP~峰会3 ,很荣幸成为thinkPHP中的一员!

因为在用THINKPHP框架的过程中,开发人员会遇到各种问题,有框架导致的问题,也有自己写的代码导致的问题,用一些专门的调试器像 Visual Studio 相联系的VS.PHP 都不好用,我也不想去装什么zend 啊之类的,就写了个调试器的类,作为TP的插件形式来使用,效果还可以,基本满足变量调试的要求。除了可以调试自己写在TP的ACTION控制器里的代码外,还可以对TP整个框架的代码进行调试,经过一些修改后,已经可以对DEDECMS和其他普通的PHP文件进行变量调试了,这种调试是把结果写到一个message.php的文件里面,用Dreamweaver之类的软件打开后可以看到相关变量的结果,不用在代码中加入什么echo , var_dump 之类的语句,就不会影响显示的结果,网上最开始的一些PHP调试器类是用的syslog 将结果输出到日志中 , 但是日志又不会删除,wamp模式的日志删了,就会出问题,还有要在代码里加syslog语句,不便于清除。总之,这一切的一切,让我决定写个方便PHP调试的插件。我会在后面的章节中介绍使用的方法,以及原理,还有详细的源码解释,现在的软件就是不给代码什么解释,或者给的很少。在解释的过程中,一起重温下PHP的各种函数的使用。

   下面先介绍下该插件的安装方法。首先下载压缩包,在 http://zenglong.w230215.fxdns.cn 首页的导航条里有个软件区,进入软件区后,可以看到 ThinkPHP变量调试插件下载 (可以点我这里的链接到那里去。),下载好压缩包后,

  将压缩包中的MyDebug.class.php 文件 放置到TP第三方插件文件夹即: ThinkPHP/Lib/ORG/Util 目录下,然后再将压缩包中的Action.class.php 放置到 TP核心文件夹即:ThinkPHP/Lib/Think/Core 目录下,会出现是否覆盖的提示,为保险起见,可以在覆盖之前,先将原来的Action.class.php 改名为 Action.class.php.bak ,如果你觉得这样不安全(因为bak文件可能会被浏览器浏览),可以把原来的这个文件另存到别的地方,然后覆盖。最后,最重要的一点就是,要到项目目录的Runtime目录下,把 ~runtime.php文件给删掉,如果是ALL_IN_ONE模式,就要删掉~allinone.php 文件,顺便把~app.php 也删了也行,这些都是TP为了加快执行速度生成的缓存文件,像Action.class.php里的内容都会跑到这些文件里面去(可以到“ThinkPHP/Lib/Think/Core/App.class.php”里查找build 函数,里面有生成缓存的具体实现)。我使用的是ThinkPHP 2.0版本,所以如果是其他版本,可以在Action.class.php中找到protected function mydebug($format,$file,$line,$array,$from=0,$to=0) 这一行,将这个函数以及函数上面的相关注释复制,再拷贝到您的Action.class.php文件的Action类中,使这个函数成为Action类的一个成员。OK ,安装就完成了,不是很困难吧。

 下面看看怎么使用,看个简单的例子:

1<?php
2  class ChapterAction extends Action{
3   public function addsort(){
4         $this->mydebug('dos&xxoo',__FILE__,__LINE__,array(5,6=>'test2'));return;
5         $test=$_GET['hello'];
6         $test2=$_GET['hello2'];

7         echo 'OK';
8         }
9  }

10 ?>

运行这个例子有个前提,看到mydebug函数中的dos&xxoo  先不管那个xxoo是什么意思,就看那个dos ,dos指的是windows系统下的文件格式(也就是 文件的换行符是“/r/n” 的),如果是linux或unix系统(比如笔者最开始就是在Red Hat linux 下用vim编辑器写PHP代码的,Linux下可没什么大型的开发工具像什么Zend Stadio 啊,Eclipse之类的,就算有安装也很麻烦,什么yum命令啊,rpm命令啊,装死个人,所以调试很麻烦,就只好写个调试器插件咯!)对于这类系统,dos&xxoo 就要改成 unix&xxoo 了。要不然调试的结果在文本里面显示的话就不舒服了。

  再来看看那个array(5.6=>'test2')  这里面得5 指的是第5行的所有变量比如$test$_GET 都要进行调试 ,6=>'test2' 表示第6行的话就只调试 $test2 变量,因为第5行已经调试了$_GET 了。好了,打开你的浏览器 输入 http://localhost/项目名称/index.php/Chapter/addsort/hello/3/hello2/4    这个格式应该看的懂吧,就是访问 Chapter控制器中的addsort操作,同时传递两个url参数 :hello 为 3 ,hello2 为4 (看不懂就去看看TP手册的URL模式讲解)。浏览器输出 OK 表示 操作顺利。 接着,打开TP项目文件夹,也就是包含了index.php的文件夹,里面会出现 三个 文件 test.php ,debug.php ,message.php (如果使用了多个mydebug函数的话,可能出现debug1.php  debug2.php 之类的,这些以后再说),先不管test.php ,debug.php 做什么用的(猜想下也能知道肯定是调试过程中产生的中间文件),那个message.php 文件就是存放调试结果的,用Dreamweaver 这类的软件打开看看(之所以推荐这个软件,因为可以对结果高亮显示!你用记事本也行,没那么好看罢了),结果如下所示:

文件:C:\Program Files\wamp\www\Myapp\Lib\Action\ChapterAction.class.php
<?
15:51:30:代码:第5"$test=$_GET[’hello’];"
变量->$test值为:string(1) "3"

变量->$_GET值为:array(2) {
  ["hello"]=>
  string(1) "3"
  ["hello2"]=>
  string(1) "4"
}

?><?
15:51:30:代码:第6行"$test2=$_GET[’hello2’]; "
变量->$test2值为:string(1) "4"

?>

OK, 调试结束,如果不想调试了,可以将 开头的那句 $this->mydebug 前面加 // ,也就是把这句代码注释掉就OK了,以后会对插件的原理和 要注意的地方(比如 mydebug这句必须位于其他语句之前,至少也得位于调试语句之前,以及必须独占一行,不能分两行之类的)以后在讲解源代码的时候会说明!好累啊,好久没写作文了,休息,休息一哈!

(责任编辑:zenglong)
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容