PHP 设置调试工具XDebug PHPStorm IDE - derrck - 博客园 http://www.cnblogs.com/derrck/p/5195946.html
Xdebug: Documentation https://xdebug.org/docs/install
Xdebug: Documentation https://xdebug.org/docs/remote
1, 按照官方文档所得, 调试的原理是, 当加载好xdebug工具的php执行php脚本时, php进程就充当client端(注意浏览php网页, 或手动php 1.php执行脚本都会创建php进程), 而ide, vdebug, XDebugClient等就充当server端, php进程和这些"server"端就通过一套协议进行通信调试信息.
xdebug是php拓展, 所有前提得配置好本地php环境
Windows7下的php环境配置教程_php技巧_脚本之家 http://www.jb51.net/article/61507.htm
1, 上文中注意的是, 可能安装好php后, 终端下运行php --ini, 可以查看php.ini配置文件路径, 假如显示没有该文件, 可以去php安装目录下, 按需要把, 把php.ini-development文件重命名为php.ini即可
1, phpstorm使用浏览器调试php
都配置好环境后, 可以开始配置xdebug
先下载PHP扩展Xdebug https://xdebug.org, 可以复制自己的phpinfo粘贴到https://xdebug.org/wizard.php中, 会自动根据本地php版本生成需要下载的版本, php.ini的设置语句. (注意一定要使用跟自己php版本相对应的xdebug拓展才行)
下载好之后放入php目录的ext文件夹中, 然后设置php.ini, 在最后加上
下面是windows环境安装xdebug拓展
zend_extension = C:\path\php\ext\php_xdebug-2.4.0rc4-5.6-vc11-x86_64.dll
xdebug.remote_enable =1
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost (设置debug时, xdebug拓展(作client端)要连接的远程server端, 这里以本机作为client, server端为例)
xdebug.remote_mode = req
xdebug.remote_port = 9000 (设置debug时, xdebug拓展(作client端)要连接的端口. 注意可能会跟nginx, php-cgi进程端口冲突, 本文下方有冲突的解决方法)
xdebug.idekey=PHPSTORM
linux环境的xdebu拓展安装方法请参照Xdebug: Documentation https://xdebug.org/docs/install
在电脑属性中添加系统环境变量, linux上可以用export命令
XDEBUG_CONFIG="idekey=phpstorm remote_host=localhost profiler_enable=1"
然后重启apache, 去设置phpstorm, 如下图右方, 配置本地php根路径
1. 进入File>Settings>PHP>Servers,这里要填写服务器端的相关信息:
name: localhost,
host: localhost,
port: 80,
debugger: XDebug
如果是自定域名则host设置自定域名, 如laravel5.io
2. 进入File>Settings>PHP>Debug,找到XDebug选项卡,port填9000 (设置debug时, ide(作server端)要监听的端口. 注意可能会跟nginx, php-cgi进程端口冲突, 本文下方有冲突的解决方法)
3, 进入File>Settings>PHP>Debug>DBGp Proxy 填写:
IDE key: phpStorm
host: localhost
port: 80
设置完毕,点OK退出。
下面设置使用浏览器调试php的方法
点菜单栏的Run>Edit Configurations… 在弹出的窗口中添加一个调试配置:
点击左上角加号,选择PHP Web Application
填写完毕后,在代码里设置断点, 再开启电话icno监听, 点小甲壳虫启动调试
再下个浏览器插件, xdebug helper, 下载好之后点选项, IDE选PHPSTORM, 不想让所以网页显示小甲虫, 可以设置domain filter
下载地址:(注意, 本人使用php_xdebug-2.5.0-5.5-vc11-x86_64.dll版本时, 实测哪怕没有该浏览器插件也是可以调试的)
Xdebug helper_Xdebug helper插件_Xdebug helper下载_Xdebug helperchrome_酷容下载
http://www.mykurong.com/extensions/xdebughelper/#download
基本完事了, 调试就点开电话图标监听, 设置好断点, 点小甲虫开启调试了, 刷新页面可见结果
或者手动在浏览器输入网址, 让执行自定义php脚本, 只要在url后加上参数XDEBUG_SESSION_START=整数 即可, 猜测是用于指示php拓展xdebug工作.
如这个格式的url: http://localhost/data/1.php?XDEBUG_SESSION_START=1
端口冲突解决办法:
注意如果是用浏览器调试, 因为要运行nginx或Apache, 和php-cgi进程, 所有端口上可能与xdebug冲突, 导致报类似下面的错:
windows下nginx根目录logs目录中的error.log日志文件可能有
CreateFile() "D:\Software\nginx-1.11.8/html/index.index" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: localhost, request: "GET /index.index HTTP/1.1", host: "localhost"
或者
cmd下运行php-cgi.exe时报
Cannot bind/listen socket - [2] No such file or directory.
Couldn't create FastCGI listen socket on port 127.0.0.1:9000
这可能是因为默认php-cgi和nginx间就是使用9000端口通信, 所有可能会跟xdebug的端口冲突, 解决办法是:
1, 任务管理器中结束所有nginx和php-cgi进程
2, nginx.conf配置文件改成:
location ~ \.php$ {
root html;
#监听9001, 非xdebug使用的9000端口即可
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
3, cmd下, 运行php-cgi.exe -b 127.0.0.1:9001 -c "D:\Software\php\php.ini" 让php-cgi进程监听9001端口跟nginx通信
4, 双击运行或cmd下运行nginx.exe
5, 就可以继续使用phpstorm在浏览器调试php代码了
6, 当然也可以设置成xdebug和ide使用其他端口
2, phpstorm不使用浏览器调试php
如果想用phpstome不通过浏览器, 直接调试php脚本, 可以在上述步骤基础上, 继续:
实测, 可以不打开"电话"按钮进行监听也行.