用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤


Posted in PHP onJanuary 19, 2014

本人主要是做ASP.NET开发的,但有时候也会接触到PHP,而且我认为PHP有很多源码值得学习,我们不是学习PHP代码的写法,而是学习源码的实现思路,或者免强叫为算法。

作为一名非专业的PHP开发者,想要较方便地读懂并搞清楚一个PHP功能模块的运行细节,搭建一个PHP调试环境,然后单步调试程序,以掌握程序的整个运行过程显的尤为重要。

一、 准备安装文件

1、PHPnow-1.5.6。“PHPnow 是 Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包。简易安装、快速搭建的 PHP 环境。”

2、ZendDebugger-5.2.14。Zend公司的PHP调试工具或叫插件。 http://downloads.zend.com/pdt/server-debugger/ZendDebugger-5.2.14-cygwin_nt-i386.zip

3、ZendStudioEnterpriseEdition-v5.5.0。据说PHP业界最著名的IDE,不知道基于Eclipse插件的PHP开发环境如何,有时间玩一下再说。

二、 配置程序

1、安装PHPnow。把安装包PHPnow-1.5.3.zip解压到一个地方,像我这里解压到“D:\soft\PHP”,然后双击PHP文件夹中的“Setup.cmd”开始安装,中间安装到MySql的时候会提示你输入数据库用户名和密码,本地测试用一般就都设为“root”。安装完成后在浏览器输入以下地址http://127.0.0.1/,如果成功的话,你将会看到如下画面:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

注意:如果你的系统之前有安装IIS,并且IIS是运行着的,要先把IIS停止掉,不然80端口会冲突,虽然通过“PnCp.cmd”工具可以修改Apache端口,但不建议这样改。

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

2、安装ZendDebugger。把ZendDebugger-5.2.14-cygwin_nt-i386.zip解压到PHPnow安装目录,即“D:\soft\PHP”,然后把ZendDebugger-5.2.14RC9-cygwin_nt-i386文件夹名字改成ZendDebugger这样短文件名,进到ZendDebugger目录,我们可以看到下面那样的文件结构:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

现在要把文件夹中的X_X_x_comp文件夹重命名为php-X.X.x,比如将“5_2_x_comp”重命名为“php-5.2.x”,因为我的测试环境都是php5.2的,所以我可以只改“5_2_x_comp”这一个文件夹。这里的改动是为了等一下在php.ini中配置它。

现在去PHP安装目录修改PHP配置文件,这个文件通常被命名为“php.ini”,让服务器能正确加载我们的模块。但是这个PHPnow环境下的PHP配置文件不叫“php.ini”,而是“php-apache2handler.ini”,我们怎么可以知道当前WEB服务器所用PHP的配置文件名呢。下面就是一个办法:在“D:\soft\PHP\htdocs”目录,建立一个phpinfo.php文件,并在其中输入内容“<?php echo phpinfo(); ?>”,然后打开浏览器可以看到如下信息,反白显示路径就是当前PHP配置文件所在路径了:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

注意:这里指的PHP配置文件是网站依赖的PHP配置文件,不是下面提到的Zend Studio目录下的php.ini文件(Zend Studio也自带了几个不同版本的PHP),如下图:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

修改“D:\soft\PHP\php-5.2.9-2-Win32\php-apache2handler.ini”文件。用记事本打开该文件,移动侧栏滚动条至最底部,在文档尾部可以发现以下配置节点:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

在其尾部追加:

zend_extension_manager.debug_server_ts="D:\soft\PHP\ZendDebugger"
zend_debugger.allow_hosts=127.0.0.1/32,192.168.0.8/24
zend_debugger.expose_remotely=always

最终应该像这样:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

解释一下:

(1);zend_extension_ts="D:\soft\PHP\ZendDebugger\5_2_x_comp\ZendDebugger.dll"这是我注释的,因为这样设置zend_extension_ts重复,出现不能与ZendOptimizer共存情况。

(2)、zend_extension_manager.debug_server_ts="D:\soft\PHP\ZendDebugger",这里指到目录就行了,PHP会自动根据自己版本去下面找php_X_X_X这样文件夹下面的dll文件,这也是上面我们为什么要对ZendDebugger下面子目录改名的原因。

(3)、zend_debugger.allow_hosts=127.0.0.1/32,192.168.0.8/24,这里后面的192.168.0.8改成你自己的IP就行了,可以像下面那样查看到自己的IP地址:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

后面的“32”,“24”不用改,它们不是目录名,而是子网掩码类型代号,“32”代表“255.255.255.255”,“24”代表“255.255.255.0”。

在浏览器打开:http://127.0.0.1/phpinfo.php,如果能看到如下信息则表明安装成功,注意看最后一行“with Zend Debugger v5.2.14, Copyright (c) 1999-2008, by Zend Technologies”。回到http://127.0.0.1/我们发现组件支持框里Zend Optimizer支持情况还是“Yes”的,说明我们Zend Debugger与Zend Optimizer是共存运行的(网上提供好些教程是不共存运行的,那样不够完美)。

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

3、安装Zend Studio。解压ZendStudioEnterpriseEdition-v5.5.0.270.rar,执行解压文件后的win_setup.exe文件,默认一路Next下去,这样就把Zend Studio成功安装在C盘了。运行它,然后关闭,因为默认是英文的,我们去改成中文。在C盘(即Zend Studio安装所在盘),搜索文件“desktop_options.xml”,如下图。

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

找到后用记事本打开,找到:

<customized_property ID="desktop.language">
 <locale language="en" country="" variant=""/>
</customized_property>

把上面的en改成zh并保存,然后把这个文件标记为“只读”( Zend Studio在特定的时候自动重启会改回默认设置,设成“只读”它就无能为力了)。另外像下面的编码选项也可根据实际情况修改:

<customized_property ID="editing.encoding">
 <encoding name="Default"/>
</customized_property>

比如可以改为<encoding name="UTF-8"/>,在用Zend Studio打开代码文件发现中文乱码时候可以修改这个选项看看。

三、 开始调试

从“开始菜单”找到“Zend Development Environment(Zend Studio)”并运行它。新建一个项目,并在这个项目中引入一个开发好的源码包,我这里的源码包在“D:\soft\PHP\htdocs\cms”,这cms是SupeSite7.0程序,在新建项目的调试选项里设置成像下图,其中Debug Server URL也可以是127.0.0.1这样的地址,只要几处设置同步就行:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤 用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

另外“工具”菜单“首选项”的“调试”标签也设置成如下图:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

现在检查一下:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

成功的话将显示“已与Debug Server成功连接。”对话框。

打开SupeSite7.0源码项目,选择Zend Studio内置浏览器,并在地址栏里输入:http://127.0.0.1/cms/ batch.search.php,这里我演示SupeSite7.0的搜索页代码调试。现在你直接按浏览器最左边的“介壳虫”按钮(从旁边倒三角可以选择不同的调试范围),直接进入batch.search.php页面调试(如果batch.search.php页之前不在编辑状态,即没有打开过,直接调试会自动打开,另外如果你用F11逐语句执行的话,当前调试页包含的外部代码文件也会被打开。

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

按调试按钮后,直接转到源码,光标定位在第一个语句了(这里我没有设置断点,并以F5方式调试程序),像下面那样:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

现在我们测试一下点击一个按钮提交表单值并捕获它。像下图那样,点“搜索”按钮后看关键字“What is CMS ?”是被如何处理的。你操作顺序必须像这样:打开http://127.0.0.1/cms/batch.search.php—>输入关键字“What is CMS ?”—>点击“搜索”按钮—>点击浏览器工具栏的“介壳虫”按钮。

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

调试后我们可以看到“What is CMS ?”是用什么变量存储并被处理的。如下图:

用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤

至此,整个Zend Studio+PHPnow+Zend Debugger服务器调试环境搭建完毕,并演示了使用方法。

PHP 相关文章推荐
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php过滤敏感词的示例
Mar 31 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
PHP四舍五入、取整、round函数使用示例
Feb 06 PHP
php实现的简单检验登陆类
Jun 18 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
CI框架简单邮件发送类实例
May 18 PHP
php pdo连接数据库操作示例
Nov 18 PHP
如何利用PHP实现上传图片功能详解
Sep 24 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 #PHP
php根据身份证号码计算年龄的实例代码
Jan 18 #PHP
php 启动报错如何解决
Jan 17 #PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 #PHP
php递归函数中使用return的注意事项
Jan 17 #PHP
使用PHP强制下载PDF文件示例
Jan 17 #PHP
5种PHP创建数组的实例代码分享
Jan 17 #PHP
You might like
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
javascript add event remove event
2008/04/07 Javascript
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python中有关时间日期格式转换问题
2019/12/25 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
Django REST 异常处理详解
2020/07/15 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
家长评语和期望
2014/02/10 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
财产公证书
2014/04/10 职场文书
接待员岗位职责范本
2015/04/15 职场文书
关于车尾的标语大全
2015/08/11 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Java中的随机数Random
2022/03/17 Java/Android
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB