前提
本文不做服务器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