共计 1416 个字符,预计需要花费 4 分钟才能阅读完成。
首先,修改 php.ini 文件中的xdebug的配置
[XDebug]
;开启xdebug
xdebug.enable=1
;开启远程调试
xdebug.remote_enable=1
;通讯key
xdebug.idekey=PHPSTORM
;宿主机ip (docker從18.03開始建議連接到特殊DNS名稱host.docker.internal)
xdebug.remote_host=host.docker.internal ;确定宿主机内此断口没有被占用
xdebug.remote_port=19000
;开启远程连接回调,自动忽略 remote_host 设置,自动读取 $_SERVER['HTTP_X_FORWARDED_FOR'] 或者 $_SERVER['REMOTE_ADDR'] 变量
xdebug.remote_connect_back=1
配置phpstorm
如上图,phpstorm里面设置红框里面的端口保持和 php.ini 文件的配置一致
如上图,点击编辑debug配置,如果没有的话添加一个
如上图,添加一个debug配置,如果没有Server 则点击 3 添加一个,另外需要注意 IDE key session id 必须要和php.ini 里面设置的对应,点击 3 添加一个Server
如上图,
1,输入需要调试的主机地址
2,输入对应主机的端口
3,勾选 路径映射
4,选择你项目根目录
5,输入docker里面Nginx的文档目录地址
经过上面的设置后,可以开始尝试调试了。
如上图,新建一个test.php文件
1,在文件左侧鼠标左键点击,打断点
2,选择刚才新建的debug配置
3,点击小绿虫
4,点击上面的电话,图标变成如上图
打开浏览器,访问test.php文件,并带上xdebug调试参数
test.php文件访问地址为:http://localhost:1025/test.php
xdebug调试参数:XDEBUG_SESSION_START=PHPSTORM
完成访问地址如下
http://localhost:1025/test.php?XDEBUG_SESSION_START=PHPSTORM
访问后phpstorm自动进入debug状态
到此全部设置完成。
遇到的坑:
打开 xdebug.remote_connect_back=1 后遇到一个坑,由于 $_SERVER['REMOTE_ADDR'] 返回的是php-fpm获取到的 $_SERVER['REMOTE_ADDR'] 是 网关IP,通常为 172.17.0.1 造成xdebug 无法连接。
解决办法:
1,执行ping 命令 : ping host.docker.internal ,或者 ipconfig /all 或者其他能获取到IDE运行所在机器的IP
2,修改 Nginx 配置文件 在 location ~ \.php 设置块 增加一个 fastcgi_param remote_addr
完整块设置,可参照设置
location ~ \.php {
include fastcgi_params;
fastcgi_pass php:9000;
fastcgi_param RUNTIME_ENVIROMENT development;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REMOTE_ADDR "192.168.1.100"; #这个是宿主ip,至关重要
}