前言
之前介绍了跟本篇文章相关的、在 windows 下开发 php 的两个前提条件,即:
接下来介绍 php 开发中比较常用的另外两个元素的配置(姑且叫做元素吧):xdebug 和 memcache。
有的童鞋可能会问了,php 的开发怎么能少得了 MySql 呢?php 与 MySql 可是绝配呀!当然不能少了 MySql,它的安装和配置,网上一大把,请自行度娘。
xdebug
- php 的调试工具,笔者用这几款 IDE: netBeans、Zend Studio、eclipse、PhpStorm,同时测试了 xdebug 和 Zend Debugger,表现最好的是 PhpStorm + xdebug,这个不一定适用于你,这个结果取决于我当时的操作和相关软件的版本,不过,笔者强烈推荐使用 PhpStorm 作为开发 php 的 IDE,而用 xdebug 来调试。
- 至于 PhpStorm 是商业软件,普通老百姓不愿意花钱买、公司也不愿意掏钱买正版的问题,笔者的经验告诉我,只要你想用,一定是有办法的,包括我现在正在用的 IntelliJ IDEA、曾经用过的 PyCharm、还有 C# 插件 ReSharper,这些都是一个产品系列,同一产品系列,我试过的还有 WebStorm、DataGrip (这两款 IDE 在 IntelliJ IDEA、PhpStorm、PyCharm 中有集成),这些 IDE 都非常优秀,绝对值得一试,况且都是有办法免费用的哈,不过,如果你不差钱,还是希望你支持正版、支持 jetbrains.com。
- php 的调试功能其实不是很强大,跟 C#/Java 的调试功能比起来,那就是小学生跟大学生的差别,不过,这跟语言的特点有很大关系,毕竟 php 人家是解释型的动态语言,它自有它自己的优势(php 是世界上最好的编程语言,没有之一 ^_^,嗯…,真的吗?)。
- 言归正传,php 在调试过程中经常中断或者说崩溃(表现就是调试断点还在,但变量值没有了),不过,有总比没有强,在排查问题的时候还是能帮上大忙,而且能比传统使用 print_r($obj) 或者 var_dump($obj) 的方式来”调试“来排查问题,效率高出 N 多倍。
不废话了,下面是干货。
- php xdebug 下载地址,注意,需要下载跟 php 对应的 xdebug 版本,比如 nts 版本 和 ts 版本,还有 php 的版本号,比如我电脑上用的是 php-5.4.45-nts-Win32-VC9-x86,我下载的是 php_xdebug-2.4.1-5.4-vc9-nts.dll。
- 把下载到的 php_xdebug-2.4.1-5.4-vc9-nts.dll 移到 php 下的 ext 目录,如我的是:
C:/dev/dev.services/php-5.4.45-nts-Win32-VC9-x86/ext/
- 修改 php.ini,添加 [xdebug] 配置节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32[xdebug]
;竟然要用32位版本才能正常加载
;原来php就用的是32位版本,汗~~~
;5.4.45只有32位可供下载
zend_extension="C:/dev/dev.services/php-5.4.45-nts-Win32-VC9-x86/ext/php_xdebug-2.4.1-5.4-vc9-nts.dll"
;开启远程调试
xdebug.remote_enable=1
xdebug.profiler_enable=1
;xdebug.profiler_enable=off
xdebug.profiler_enable_trigger=off
xdebug.profiler_output_name=cachegrind.out.%t.%p
xdebug.profiler_output_dir="tmp"
xdebug.show_local_vars=0
xdebug.remote_connect_back=1
;开启自动跟踪
xdebug.auto_trace=1
;开启异常跟踪
xdebug.show_exception_trace=1
;开启异常跟踪
xdebug.remote_autostart=1
;收集变量
xdebug.collect_vars=1
;收集参数
xdebug.collect_params=1
;trace输出路径
xdebug.trace_output_dir="tmp/xdebug"
;以下三个分别是主机、端口、句柄
xdebug.remote_host="localhost"
;注意,这里的端口不能跟 php-cgi 冲突,php-cgi 默认为 9000
xdebug.remote_port=9001
xdebug.remote_handler="dbgp"
memcache
php_memcache 扩展下载地址
- 在 windows 下将 memcache 配置成服务并设置为开机启动。
- 下载扩展 php_memcache.dll(注意要下载与 php 版本对应的文件)放到 php 的 ext 目录。
- 修改 php.ini,添加下面的配置内容
1
2
3
4
5
6
7extension=php_memcache.dll
[Memcache]
memcache.allow_failover = 1
memcache.max_failover_attempts=20
memcache.chunk_size =8192
memcache.default_port = 11211
在 [Session]节点下添加如下内容1
2session.save_handler = memcache
session.save_path = tcp://localhost:11211
将 session.save_handler = files 删除或注释掉
重新运行 php-cgi
停止
1
taskkill /F /IM php-cgi.exe > nul
启动
运行在 windows 下配置 nginx 支持 php 中提到的批处理文件,或者简单粗暴的执行如下命令1
2
3#请注意需要将路径替换成你自己的。
cd C:\dev\dev.services\php-5.4.45-nts-Win32-VC9-x86
php-cgi.exe -b 127.0.0.1:9000 -c C:\dev\dev.services\php-5.4.45-nts-Win32-VC9-x86\php.ini
在现在的 php 站点中添加一个文件 phpInfo.php,文件内容:
1
2
3
phpinfo();访问这个页面,检查配置是否生效。配置成功,将会看到下面的信息。
如果 php_memcache 扩展的版本与 php 不一致,在执行php-cgi.exe -b 127.0.0.1:9000 -c C:\dev\dev.services\php-5.4.45-nts-Win32-VC9-x86\php.ini
,会得到类似下面的错误:1
2
3
4PHP Startup: memcache: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20100525
These options need to match



PhpStorm 配置 xdebug 端口
PhpStorm 的默认值是 9000,要改为 9001,跟 php.ini 配置文件里配置的要一致。
xdebug 调试信息配置



