在 Swoole 的官方文档中就明确指出了 Swoole 和 Xdebug 不兼容,虽然Xdebug 2.7 ,可用于 Swoole 环境进行断点、现在 Swoole 已经有了yasd,可以改用,毕竟 Swoole 和 Xdebug 存在兼容问题。(以下是从网上看了资料自己动手实现整理记录下来)
1.环境说明
1)windows10专业版
2)虚拟机系统centos7
3)phpstorm2021.3
4)php8.0.24
2.在虚拟机中安装php环境
虚拟机的安装和centos7在虚拟机中的安装就不在这里赘述了,可以去搜索其他文章了解
这里直接讲安装php环境 为了方便使用yum安装
1)首先安装remi扩展源(这里直接使用清华软件源)
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
2)确认一下能安装的php8.0和扩展
yum list | grep php80
3)安装php8.0和一些经常用到的扩展(如果有其他需要使用可自行加上)
yum install -y --enablerepo=remi-php80 php80 php80-php php80-php-xml php80-php-xmlrpc php80-php-pecl-mcrypt php80-php-fpm php80-php-pecl-apcu php80-php-mbstring php80-php-gd php80-php-json php80-php-pecl-json-post php80-php-pdo php80-php-mysqlnd php80-php-pecl-mysql php80-php-opcache php80-php-pear php80-php-soap php80-php-intl php80-php-devel php80-php-cli php80-php-bcmath php80-php-pecl-mongodb php80-php-pecl-redis php80-php-pecl-amqp php80-php-ftp php80-php-openssl php80-php-pecl-swoole5
4)确认安装结果(php的安装目录是/opt/remi/php74/root/ php-fpm工具也在里面)
yum list installed | grep php
5)通过remi安装的php的指令是php80,这里建立一下软链接就可以直接使用指令php
ln -sf /usr/bin/php80 /usr/bin/php
6)查看安装的php版本
php -v
7)查看安装的php的扩展
php -m
8)由于hyperf中需要swoole关闭短标签,我们在这里关闭一下
修改里面的内容
vi 40-swoole.ini
swoole.use_shortname = Off
9)创建hyperf项目,hyperf的项目有两种网络引擎驱动swoole和swow,我这里使用swoole驱动,使用composer来创建项目(一路回车知道创建完成)
composer create-project hyperf/hyperf-skeleton
3.yasd的安装
由于remi扩展源中没有yasd扩展所以我们需要手动编译安装扩展
1)yasd需要先安装boost
yum install boost boost-devel
2)拉取master分支源码(github有时候网络差可以多试几次,也可以通过修改hosts的方式来加快速度)
git clone https://github.com/swoole/yasd.git
3)安装扩展(进入到拉取的yasd目录--使用php安装目录的phpize工具)
/opt/remi/php80/root/bin/phpize --clean && \/opt/remi/php80/root/bin/phpize && \./configure --with-php-config=/opt/remi/php80/root/bin/php-config && \make clean && \make && \make install
4)修改php.ini在最底下加上(通过remi源安装的php配置文件路径一般在/etc/opt/remi/php80/php.ini)注:这里的host要使用你phpstorm所在的主机地址
zend_extension=yasdyasd.debug_mode=remoteyasd.remote_host=192.168.2.52yasd.remote_port=9000
4.phpstorm配置远程代码同步更新和代码调试配置
1)phpstorm配置sftp
1,打开phpstorm,创建一个项目命名为hyperf-skeleton(可以根据自己情况命名)
2,点击工具栏的Tools=>Deployment=>Browser Remote Host:
1.3,点击... 进行配置后点击+号选sftp,输入sftp的名称(ftp等,大部分linux服务器默认开启sftp而没有ftp)
sftp服务器(虚拟机)ip,ssh端口(默认22),账号密码
点击mapping,配置Deployment Path,这个目录填写虚拟机中创建的hyperf项目的目录(项目运行目录),通过上传更新虚拟机文件或者下载虚拟机文件到本地
勾选自动上传,每次修改完代码会自动上传到虚拟机服务器(复制粘贴,composer 等非编辑器修改的文件不会被上传,需要手动)
在Remote Host中对于的项目文件右键下载前面创建的项目文件到本地
到这步的时候,我们已经可以和服务器的文件目录同步文件了,你在本地修改过的文件可以自动上传的服务器中,服务器修改过的你也可以手动下载下来
4,配置ssh终端,点击Tools=>Start SSH session,选择刚刚已经配置好的sftp配置名,就可以开启一个ssh终端
配置好ssh的连接,接下来就可以在phpstorm 中使用ssh终端操作服务器(虚拟机)了
2)phpstorm配置php环境
1,在phpstorm中使用服务器(虚拟机)的php环境需要配置php环境,点击phpstorm菜单栏File=>Settings找到php配置点击...
2,点击加号=>From docker,Vagrant,VM.我们用的是VM方式
选择ssh配置上我们之前就配置好的远程服务器 完成后ok-》ok
3)配置Debug中的调试端口和yasd中的远程端口一致
5.使用phpstorm调试hyperf项目
1)打开PhpStorm右上角的小电话,开启PhpStorm监听debug设置的端口
2)设置断点
需要注意:Hyperf项目启动时会生成代理类,所以打断点的时候需要在runtime/container/proxy/
中的代理类中打断点
3)启动项目
使用yasd调试项目的时候需要增加-e
参数
php -e ./bin/hyperf.php start
在之前phpstorm打开的ssh中进入到项目的目录 执行命令
4)去请求打了断点的接口就会发现代码停在了断点的位置(成功进入到断点)
需要注意的几点
1)在配置项目启动或请求断点接口的时候可以会碰到的问题
[yasd] recv command error, connection closed
[yasd] recv command error, Connection reset by peer
碰到这个报错的时候需要配置config.php中的SCAN_CACHEABLE为true(为ture表示启动时不扫描和生成代理类缓存,直接以现有的缓存文件作为最终代理类)设置为 true 后需要注意,每次修改代码需要手动生成代理类,composer dump-autoload -o,然后在启动。或者直接在代理类中修改代码,当 debug 结束后,再将代理类中的代码复制到真实类中。
2)在 Hyperf 框架中如果使用到了 Swoole Server,需要将 worker_num 设置为 1 否则断点可能不会生效。该参数在 server.php 中。
来源地址:https://blog.csdn.net/boy7607891xy/article/details/127345758