【php有图真相】docker环境下使用phpstorm进行xdebug调试代码

前提

本文不做服务器docker的安装,网上资料一大堆,参考官网即可。

环境

Ubuntu 16.04 LTS   #查看命令  lsb_release -a

docker version:18.09.7 #查看命令 docker version

镜像:php:apache-stretch  #链接https://hub.docker.com/_/php?tab=description&page=116

php version:7.3.11 #查看命令php -v

apache2.4.25

phpstorm 2019.2.3

xdebug 2.7.2

docker可视化工具 portcontainer

运行效果

配置docker php环境

一 运行php容器

先拉镜像

docker pull php:php:apache-stretch

创建映射目录

mkdir -p /web/phpems/www/  #根据自己项目实际情况

制作index.php

cd /web/phpems/www/

用vim等这里不做介绍

<?php
	phpinfo();
?>

将你的php项目拷贝至www/目录下

利用ftp或者其他方式,这里用本人项目phpems做演示

/web/phpems/www/目录下

index.php

phpems #这个是用来测试得项目

运行容器

docker run -d --name ems --restart=always --privileged=true -p 8089:80 -v /web/phpems/www:/var/www/html php:apache-stretch

这是运行容器的命令

-d 后台运行

--name 命名容器

-p 是外部端口和内部端口映射

--restart 重启方式

--privileged权限

-v 宿主机与容器文件路径映射

查看环境效果

浏览器输入你的docker服务器的ip和该容器的对外暴露的端口

例如:http://192.168.2.142:8089/index.php 出现下面的界面就表示docker php环境ok了

二 安装配置xdebug

php安装扩展方式

redis pdo_mysql xdebug等等这些扩展库php默认是不安装的,docker 下可以通过docker-php-ext-install方式或者pecl安装

查看docker-php-ext拓展命令

cd /usr/local/bin

ls 可以看到如下命令 具体的话根据实际情况使用,我们这里会用到的是 docker-php-ext-enable  docker-php-ext-install这两个

apache2-foreground  docker-php-entrypoint  docker-php-ext-configure  docker-php-ext-enable  docker-php-ext-install  docker-php-source  pear  peardev  pecl  phar  phar.phar  php  php-config  phpdbg  phpize

安装扩展库xdebug

最好想更新源apt-get update

pecl install -o -f xdebug \

&& rm -rf /tmp/pear \ 

&& docker-php-ext-enable xdebug

逐行输入命令亦可,根据控制台日志处理。

重启docker容器 docker restart ems #ems为运行容器时指定的命令

在通过浏览器查看index.php 看看有没有xdebug的信息

php.ini添加xdebug配置

跟着下图配置就行

remote_host是你phpstorm主机ip

remote_port是phpstorem调试设定的端口

[xdebug]
;zend_extension=/opt/php5/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so 
xdebug.enable=1
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.remote_handler=dbgp
;xdebug.remote_mode=req
xdebug.remote_host=192.168.2.131  
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
xdebug.remote_log='/var/log/php/xdebug_remote.log'

三 phpstorm配置

设置调试端口

File>settings>Debug

设置服务

File>settings>Servers

1添加server

2随便起名称

3勾选

4设置docker服务器IP ,php容器暴露的端口

5选中文件路径映射 

6本机即phpstorm项目文件路径

7docker php容器内部项目文件路径 与6对应

因为是远程调试,所以这里的Use Path mappings 一定要选,并且本地与远程文件要映射好

 

配置运行phpstorm配置

再弹出框的左上角点击+号,增加一个PHP Remote Debug应用,选择刚刚上面创建的server(remoteDebug),然后Session id为PHPSTORM,和上面xdebug里面的保持一致。然后点击右下角Apply和OK。

创建远程调试

1添加Php remote debug

2名称

3选中过滤

4选择刚才创建的server

5填写服务器php.ini配置的xdebug idekey

安装chrome xdebug helper调试插件

前面描述的是通过PHPStorm的debug按钮,发送类似?XDEBUG_SESSION_START=17212这种请求调起浏览器来达到调试的目的,但是这种方式只能调起首页,存在缺陷。下面介绍另外一种启动调试的方式,就是通过浏览器中带XDEBUG_SESSION
的cookie直接发起,可以安装Chrome插件Xdebug Helper或者添加浏览器的调试插件、或书签来达到目的。新建书签的url:https://www.jetbrains.com/phpstorm/marklets/,这里就不再做示例,插件和书签的原理都是一样的,都是在cookie中添加XDEBUG_SESSION=PHPSTORM。

可能需要过墙,chrome商店搜索xdebug helper安装即可,CSDN上也有很多下载资源这里就不细说了

安装后设置chrome xdebug选项IDE key改成php.ini 中设置的要一样

开启xdebug监听

先点击电话,然后点击甲壳虫,直到显示为下面这个状态

在这里插入图片描述

浏览器调试

phpstorm标记断点,chrome输入访问地址

采坑

运行调试php项目时发生了failed to open stream:Permission denied in问题,原因就是文件没有权限,通过chmod -R 777授权即可 参考:https://blog.csdn.net/jabony/article/details/102816920

参考:

https://www.e-learn.cn/content/php/1532675

https://blog.csdn.net/qq_21891743/article/details/90716941

https://www.cnblogs.com/php-linux/p/10803407.html

发布了255 篇原创文章 · 获赞 471 · 访问量 109万+

猜你喜欢

转载自blog.csdn.net/knockheart/article/details/102817671