如题

前言

之前介绍了跟本篇文章相关的、在 windows 下开发 php 的两个前提条件,即:

  1. 把 nginx 安装为 Windows 的一个服务
  2. 在 windows 下配置 nginx 支持 php

接下来介绍 php 开发中比较常用的另外两个元素的配置(姑且叫做元素吧):xdebug 和 memcache。
有的童鞋可能会问了,php 的开发怎么能少得了 MySql 呢?php 与 MySql 可是绝配呀!当然不能少了 MySql,它的安装和配置,网上一大把,请自行度娘。

xdebug

  1. php 的调试工具,笔者用这几款 IDE: netBeans、Zend Studio、eclipse、PhpStorm,同时测试了 xdebug 和 Zend Debugger,表现最好的是 PhpStorm + xdebug,这个不一定适用于你,这个结果取决于我当时的操作和相关软件的版本,不过,笔者强烈推荐使用 PhpStorm 作为开发 php 的 IDE,而用 xdebug 来调试。
  2. 至于 PhpStorm 是商业软件,普通老百姓不愿意花钱买、公司也不愿意掏钱买正版的问题,笔者的经验告诉我,只要你想用,一定是有办法的,包括我现在正在用的 IntelliJ IDEA、曾经用过的 PyCharm、还有 C# 插件 ReSharper,这些都是一个产品系列,同一产品系列,我试过的还有 WebStorm、DataGrip (这两款 IDE 在 IntelliJ IDEA、PhpStorm、PyCharm 中有集成),这些 IDE 都非常优秀,绝对值得一试,况且都是有办法免费用的哈,不过,如果你不差钱,还是希望你支持正版、支持 jetbrains.com。
  3. php 的调试功能其实不是很强大,跟 C#/Java 的调试功能比起来,那就是小学生跟大学生的差别,不过,这跟语言的特点有很大关系,毕竟 php 人家是解释型的动态语言,它自有它自己的优势(php 是世界上最好的编程语言,没有之一 ^_^,嗯…,真的吗?)。
  4. 言归正传,php 在调试过程中经常中断或者说崩溃(表现就是调试断点还在,但变量值没有了),不过,有总比没有强,在排查问题的时候还是能帮上大忙,而且能比传统使用 print_r($obj) 或者 var_dump($obj) 的方式来”调试“来排查问题,效率高出 N 多倍。

不废话了,下面是干货。

  1. 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。
  2. 把下载到的 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/
  3. 修改 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 扩展下载地址

  1. 在 windows 下将 memcache 配置成服务并设置为开机启动。
  2. 下载扩展 php_memcache.dll(注意要下载与 php 版本对应的文件)放到 php 的 ext 目录。
  3. 修改 php.ini,添加下面的配置内容
    1
    2
    3
    4
    5
    6
    7
    extension=php_memcache.dll

    [Memcache]
    memcache.allow_failover = 1
    memcache.max_failover_attempts=20
    memcache.chunk_size =8192
    memcache.default_port = 11211

在 [Session]节点下添加如下内容

1
2
session.save_handler = memcache
session.save_path = tcp://localhost:11211

将 session.save_handler = files 删除或注释掉

  1. 重新运行 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
  2. 在现在的 php 站点中添加一个文件 phpInfo.php,文件内容:

    1
    2
    3
    <?php
    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
4
PHP Startup: memcache: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20100525
These options need to match

php-配置信息-xdebug
php-配置信息-xdebug
php-配置信息-xdebug-zend
php-配置信息-xdebug-zend
php-配置信息-Memcache
php-配置信息-Memcache

PhpStorm 配置 xdebug 端口

PhpStorm 的默认值是 9000,要改为 9001,跟 php.ini 配置文件里配置的要一致。

PhpStorm 配置 xdebug 端口
PhpStorm 配置 xdebug 端口

xdebug 调试信息配置

debug-配置-编辑
debug-配置-编辑
debug-配置-添加站点
debug-配置-添加站点
debug-配置-进入调试服务窗口-添加xdebug服务。注意:host 一定要跟实际在 Apache 中配置的一样
debug-配置-进入调试服务窗口-添加xdebug服务。注意:host 一定要跟实际在 Apache 中配置的一样
debug-配置-如果要停止调试,点这里
debug-配置-如果要停止调试,点这里