官方文档 Xdebug: Documentation » Profiling
以下操作都以macbook环境为例
docker内php安装xdebug
pecl install xdebug
docker-php-ext-enable xdebug
本地php安装xdebug
pecl install xdebug
成功后提示
Build process completed successfully
Installing '/usr/local/Cellar/php@7.2/7.2.34_2/pecl/20170718/xdebug.so'
install ok: channel://pecl.php.net/xdebug-3.1.5
Extension xdebug enabled in php.ini
执行 php --ini 查看php所使用的配置路径
本地编辑php.ini文件,docker内编辑配置路径下 docker-php-ext-xdebug.ini, 例如
vi /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
docker内可能会提示无法使用vi命令,可执行一下命令安装
apt-get update
apt-get install vim
完成后编辑xdebug相关配置
zend_extension=xdebug
xdebug.mode=profile
xdebug.start_with_request=XDEBUG_TRIGGER // 可选,如果不配置这个所有访问都会生成分析文件,启用的话可通过url参数的形式来触发分析,例如 http://localhost/inde.php?XDEBUG_TRIGGER
xdebug.output_dir=/www //分析脚本输出目录,docker内的话需要将地址改为docker内与本地目录映射的地址
xdebug.use_compression=false
然后重启本地php或者docker php
安装xdebug脚本分析软件
brew install qcachegrind
启动命令 qcachegrind
然后调用需要分析的api,会在上面设置的 xdebug.output_dir 目录里生成xdebug分析文件,在qcachegrind里打开分析文件即可看到分析内容
我本地是php7.2的,之前通过brew install php@7.2 安装的
上面执行完后php无法正常运行了,提示
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.68.dylib
Referenced from: /usr/local/opt/php@7.2/bin/php
Reason: image not found
[7] 63371 abort php -m
我猜是安装qcachegrind导致的,解决办法,只有重装php
brew upgrade php@7.2
==> Upgrading 1 outdated package:
php@7.2 7.2.34_2 -> 7.2.34_4
Error: php@7.2 has been disabled because it is deprecated upstream!
因为我不想换版本,本来想直接通过升级来解决,但是官方brew又不支持php7.2了,只有想其他办法来重装.
先卸载原来的php
brew services stop php@7.2
brew uninstall php@7.2
重装php7.2
brew tap shivammathur/php
brew install shivammathur/php/php@7.2
安装成功提示
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.2/
php@7.2 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
If you need to have php@7.2 first in your PATH, run:
echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.2/sbin:$PATH"' >> ~/.zshrc
For compilers to find php@7.2 you may need to set:
export LDFLAGS="-L/usr/local/opt/php@7.2/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.2/include"
To restart shivammathur/php/php@7.2 after an upgrade:
brew services restart shivammathur/php/php@7.2
Or, if you don't want/need a background service you can just run:
/usr/local/opt/php@7.2/sbin/php-fpm --nodaemonize
然后根据上面提示,启动php7.2
brew services start shivammathur/php/php@7.2
惊奇的发现之前安装的php扩展都还在,什么都不用改,很nice.