用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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
PHP define函数的使用说明
Aug 27 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
php取得字符串首字母的方法
Mar 25 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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
无限级别菜单的实现
2006/10/09 PHP
PHP 5.0对象模型深度探索之对象复制
2008/03/27 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
新手入门常用代码集锦
2007/01/11 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Python解析最简单的验证码
2016/01/07 Python
django最快程序开发流程详解
2019/07/19 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python日志模块logbook使用方法
2019/09/19 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
新教师岗前培训方案
2014/06/05 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
趣味运动会简讯
2015/07/20 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
python运行脚本文件的三种方法实例
2022/06/25 Python