搬家注:该日志写于2011 年 04 月 07 日,Eclipse,PHP等版本号很多,更新也比较快,请注意文章中的版本。本文不一定帮您解决问题,但能给您一些解决问题的思路及一些概念。
最近开始做SRTP项目WebOS,于是又开始了PHP之旅。搭建PHP环境又用了一两天,一个字,烦。遇到了很多问题,从Apache+php+mysql的配置到 Eclipse+PHP+XDebug(Zend Debbuger也同时配置了)的开发环境搭建,各种Google,各种教程贴,各种问题帖,各种矛盾的说法,虽然大部分人都按自己说的解决了问题,但是同一个问题解答方法各异,弄得我也是一头雾水,突然觉得这大部分时间都在为Google添加利润点击广告罢了。
搜索了很多,也解决了不少问题,得到了很多感悟,不知从哪个说去,一点点来吧。关于配置Apache+php+mysql,我将在另一篇日志中说说我的经验。
先说说我的各种版本,搜索引擎最大浪费就在与很多很过时的东西,很多都在说Eclipse3.2,3.4,php5.1等等,于是各种悲剧,感觉和小白鼠像极了。
操作系统:Win7 Ultimate
Eclipse:Eclipse for PHP Developers(Version: Helios Release,Build id: 20100617-1415)这里说一下,Pdt我没配,但是Debug插件的配置和eclipse关系不太大。
PHP:php5.2.17 TS(thread safety)vc6(刚从官网下的)官网上分两种版本5.3.6的vc9版本和5.2.17的vc6版本,vc9是在IIS下用的,而vc6是在apache下用的(左边有说明),每个版本又分为thread safe和non thread safe的(和下面的debug插件配置有关),一般推荐下载thread safe。
XDebug 2.1.1(官网)版本很多,不过有个链接可以帮你选择。(主要三个方面TS or not,vc6 or vc9, 32 bits or 64 bits). 我选择PHP 5.2 VC6 TS (32 bit) .
Zend Debugger: 这个最麻烦,需要注册才能下载,它在推广Zend Studio。插件名叫Studio Web Debugger,windows版本名字叫ZendDebugger-20100729-cygwin_nt-i386.zip,里面有各种版本的debugger,一定要注意5_x_x_和nts(这个是non thread safety),TS的要用5_2_x_comp(和Xdebug反了过来)。另外把dummy.php拷到根文档下(http://localhost:8081/dummy.php)为了在Eclipse中测试成功与否。
弄好各种版本之后,就开始配置了,就是一个php.ini的配置。
这里先说下Eclipse中调试的两种方式: Debug as PHP script 和 Debug as PHP web page。
Debug as PHP script是直接调用php.exe解释的,不用开apache也能调试(事实上和apache无关)。但是缺陷也很大,不能在浏览器中打开网页,也没办法得到cookie,post等的值,即$_COOKIE, $_REQUEST等(可以再命令行参数中舍,但是很不方便,也不好用)。
Debug as PHP web page其实就是一种特殊的远程调试,可以在浏览器中打开网页,然后执行,可以动态的得到cookie等值,我就是用这种模式调试的,不过既然是 Remote debugging,就要在配置中开起来,否则这种调试设了断点也不起作用。下面配置会说到。
好了,Xdebug的配置
[xDebug] ;这一行没有也没关系
zend_extension_ts = “C:\Program Files\PHP\ext\php_xdebug-2.1.1-5.2-vc6.dll” ;注意ts指的是thread safety,此版本的一定要有。最好写上文件的整个路径,相对路径问题很大,很可能出问题。
xdebug.remote_enable = On ;其实官网上的配置没有给这一句,如果不配置这项,那么就没办法使用Debug as PHP web page了,所以还是开了。
网上有很多项,我只配置了这两项也照常使用,因为我不知道网上说的其他项的意思,我就没配。当然,一可以去查官方文档,第二在phpinfo里面xdebug下每一配置项都列出来了,你想配哪项配哪项。
配置成功的标志,查看phpinfo,能看到下面两项
看有Xdeug
配置项挺多的,慢慢去研究吧
Zend debugger配置,php.ini中
[zend debugger]
zend_extension_ts = “C:\Program Files\PHP\ext\ZendDebugger.dll”;同样注意ts和完整的路径。
zend_debugger.allow_hosts=127.0.0.1,192,168.0.4;允许调试的主机IP,
zend_debugger.expose_remotely=always;就是远程调试,debug as php web page就要用这个
同样我也配置了上面三项就正常使用了。
配置成功的标志,查看phpinfo。
有这个就配置成功啦。
Eclipse的配置还没说呢,其实到这如果懂了Debug as php script和debug as php web page的原理Eclipse的配置也就很简单了,无非是在Eclipse选项-》php-》debug里面配置一下就好了,有php executables(php.exe),php servers注意端口(如http://localhost:8081),两个debug插件的端口(默认一个9000一个10000)就不要乱改了。另外,如果配置了Zend Debugger,注意把前面的dummy.php拷过去才能点击test Debbuger成功哦。下面在php文件上点击断点,在文件上右击Debug as 就可以开始了,对就这么简单。
总结一下配置的整个过程中容易出错的地方:
- 版本的对应关系要对,如php和debug插件的版本一致。
- 一定要注意ts(thread safe)和nts(none thread safe),有时候标注的是ts,另一个版本不标注;有时候标注的是nts,而ts就不标注。
- 注意官方文档坚决的说明,Apache下一定要用php vc6版本的。
- 两个插件中的zend_extension_ts中最好写上完整路径,相对路径这东西和环境变量有关,问题很大。
- 配置debug插件成功与否与Eclipse无关,建议先配置能够在phpinfo中成功了再去在Eclipse中设置。
- 莫名其妙的错误怎么办,最好的办法是查看apache错误日志:在 apache安装目录下的logs/eroror.log文件中有详细记录,这个我将它称作解决问题的终极大杀器,看了它,你一定明白了在哪区找错误,该搜索哪些问题。比如出现了failed loading extention “ext\ZendDebugger.dll” ,你是不是想到了apache没有找到这个dll文件或者我是不是搞错了dll文件是ts还是nts呢。这个解决办法我会在另一篇关于apache+php+mysql的文章中详细介绍。
题外话:开源软件的配置固然是繁,版本固然多,版本更新也快,软件的使用上就必然有点不得心应手了,尤其是各种软件组合在一起问题那就更多了。那么怎么解决这些问题呢,我们一般的做法是有那个问题搜索那个问题,看了一个个解决方案,一个个教程,而忽视了最根本的东西,官方文档,看了文档,你才能知其然,知其所以然。我在上面乐此不疲的提到,官方文档怎么说怎么说,就是因为我在一次次的像小白鼠一样试验着网上的各种教程的时候,最终还是官方文档帮我解决了各种问题,各种疑惑。想想现在,就是出了问题我也不怕,并且认为,一步一步像这样配置下来怎么会出问题呢。所以回归原点,才是我们解决问题的根本之所在。
注:既然我在标题中写了最新最详细最简洁的字眼,但是我的表述不一定准却,考虑也并非周全。之所以这样,是想和大家一起讨论,大家有什么问题都可以留言,我们一起来解决,让它最新最详细也最简洁,让更多的后来人少走点弯路。