docker中的php7代码调试
前言
- 最近想好好看看PHP反序列化POP链的构造,加上之前遇到的laravel的题,想把挖的坑埋了,于是开始漫长的环境搭建之旅。。。
- 由于laravel是在PHP7环境下的框架,我在物理机上使用的phpstudy怎么都无法成功调试,最近又迷上docker的一次搭建万年使用并且随时还原的方便(使用爽,构建火葬场);使用docker可以做到php版本灵活切换,在这里把遇到的坑和一些产物记录下来。
搭建过程
- 本文的搭建方法主要参考自http://ramkulkarni.com/blog/setting-up-and-debugging-php7-in-docker/
坑
- 国内环境下原Dockerfile不能成功下载程序
- 原文中的VScode配置过时,需要更改为新的模式
- PHPstorm在配好环境后仍然不能正常debug,只能停在第一行的断点处,并且继续执行下一行时失去连接。抓包后可以看到双方都有通讯,从而不是服务器端的问题。
- 吹爆VScode!
踩完坑后的搭建过程
Docker服务器端
- Dockerfile已上传:https://github.com/HACHp1/docker_php7_apache_xdebug
- 首先,修改php.ini文件使之与你的环境一致: 123456[xdebug]zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so #(此处如果要更改php7的版本,则需要进一步操作,操作在后文中出现)xdebug.remote_enable=1xdebug.remote_autostart=1xdebug.remote_host=192.168.153.1 #(此处修改为你VScode所在的主机)xdebug.remote_port=9000
然后,build Dockerfile: 1docker build -t php7_xdebug .
记下返回的id。
- 然后运行container: 1docker run -d -p 10086:80 --name php7_xdebug --restart=always 刚刚返回的id
VScode端
- 在插件中直接搜索安装 PHP Debug
在配置中设置,其中的
pathMappings
后面设置VScode端的项目路径,此处设置了本地到远程的文件目录映射:12345678910{"name": "Listen for XDebug","type": "php","request": "launch","stopOnEntry": true,"pathMappings": {"/var/www/html":"C:\\Users\\...\\php7_docker"},"port": 9000}至此,就可以打好断点愉快地debug了:
更改php7版本
- 首先修改Dockerfile中的php7版本
- 构建并运行container后,输入:
|
|
- 将返回结果替换到php.ini中的
zend_extension=
之后 - 重新启动container中的服务器
- 继续后续操作即可(换版本时主要是需要把php.ini中的路径重新设置好)
参考资料
- http://ramkulkarni.com/blog/setting-up-and-debugging-php7-in-docker/
- https://jonathansblog.co.uk/remote-debugging-php-in-visual-studio-code-with-xdebug