资讯专栏INFORMATION COLUMN

用Atom调试PHP

Elle / 2679人阅读

摘要:于是,这次顺利通过。联合调试问题就出在这里,无论我如何刷新页面,里的总是启动不起来。如果你也使用的话,这篇文章一定对你有帮助。

其实是很容易的一件事情,就因为一个端口的问题,费了好大劲,且听我慢慢道来。

安装xdebug

首先,我们要安装xdebug。在Mac上的安装方法相对简单:brew install php56-xdebug就好了。但是这里也遇到了一些小障碍,首先它说我原先用brew安装的php56不够新,那么就brew upgrade php56好了,结果它又说Xcode不够新,那好,先升级XCode,结果升级完了XCode还是说不行,在.configure的时候找不到zlib库,原来还需要在命令行执行xcode-select --install,执行完这个之后再执行brew upgrade php56,顺利通过。于是brew install php56-xdebug,这次顺利通过。

安装php-debug插件

接下来,我们直接在Atom里搜索插件php-debug,安装通过,执照它的要求,在/usr/local/etc/php/5.6/conf.d/ext-xdebug.ini文件中添加以下行:

[xdebug]
zend_extension="/usr/local/opt/php56-xdebug/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_connect_back=1    # Not safe for production servers
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=false

请注意,这里一定要把xdebug.remote_autostart设为false,因为如果你不把这里设置为false的话,下一步安装的浏览器插件就不会起作用。

安装Chrome插件

安装Xdebug Helper。这一步也相对比较容易,缺省安装就可以。安装之后就是这个样子,当你需要debug的时候,点击这个小甲虫把它变成绿色就可以了。我们上面一个步骤把autostart设为false就是为它服务的,如果你在上一步没有把autotart设为false的话,那么不论你按不按,每一个请求都会debug。

联合调试

问题就出在这里,无论我如何刷新页面,Atom里的debug总是启动不起来。我一开始强烈怀疑是不是这个xdebug就没有启动,没有监听呢?于是我执行以下命令

sudo lsof -iTCP -sTCP:LISTEN -n -P

得到以下结果:

Atomx20H 84631   27u  IPv6 0xdc8cd80c818ef9f      0t0  TCP *:9000 (LISTEN)
php-fpm   85455    6u  IPv4 0xdc8cd80d825f02f      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   85460    0u  IPv4 0xdc8cd80d825f02f      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   85461    0u  IPv4 0xdc8cd80d825f02f      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm   85462    0u  IPv4 0xdc8cd80d825f02f      0t0  TCP 127.0.0.1:9000 (LISTEN)

我一开始不太理解原理,我以为php-fpm监听9000端口和Atom监听9000端口都是由于这一句设置

xdebug.remote_port=9000

导致的,虽然隐隐约约感觉这里不对,但是也没有多想,还在疯狂尝试各种方法,甚至加上了

xdebug.remote_log=/var/log/xdebug.log

查看我刷新页面时是否有请求发送给php-fpm,每次刷新页面时确实有请求进来,但总是连不通,无论如何刷新页面,Atom永远都是Listening状态:

万般无奈之下,回去读文章,在最关键处读到原来xdebug里的9000端口设置是为连接远端设置的,也就是说xdebug本身不是服务器,而我们的Atom里的php-debug才是服务器!是我们的Atom在监听9000端口,而位于php-fpm里面的xdebug配置9000不是让它去监听9000,而是向我们这个Atom的9000端口发请求!

那我们的php-fpm的9000端口监听又是哪里来的呢?原来php-fpm的缺省配置/usr/local/etc/php/5.6/php-fpm.conf也是9000端口!

listen = 127.0.0.1:9000

所以是Atom和php-fpm在争夺9000端口!或者说xdebug误导了Atom去使用9000端口。

了解了这个,接下来就好办了,我们把ext-xdebug.ini里的xdebug.remote_port改成9090

xdebug.remote_port=9090

再把Atom里的php-debug监听端口改为9090

这时候再在Chrome里面刷新页面,不再是Listening状态,变为Connected状态了!

原先之所以没有人提到这个,是因为大家通常都是直接用Apache调用php,没有使用php-fpm,所以没有遇到这个问题。如果你也使用php-fpm的话,这篇文章一定对你有帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22992.html

相关文章

  • atom 安装 xdebug 调试 php 代码

    摘要:前言是一款帮助调试代码的扩展主要功能有堆栈跟踪代码覆盖率分析垃圾收集统计远程调试其中最有用的功能就属远程调试了,下面就一步步来搭建。它检查和变量以找出使用哪个地址。 前言 xdebug是一款帮助php调试代码的扩展,主要功能有 堆栈跟踪 代码覆盖率分析 垃圾收集统计 远程调试 其中最有用的功能就属远程调试了,下面就一步步来搭建xdebug。从sublime转到atom后,发现ato...

    Lsnsh 评论0 收藏0
  • atom 安装 xdebug 调试 php 代码

    摘要:前言是一款帮助调试代码的扩展主要功能有堆栈跟踪代码覆盖率分析垃圾收集统计远程调试其中最有用的功能就属远程调试了,下面就一步步来搭建。它检查和变量以找出使用哪个地址。 前言 xdebug是一款帮助php调试代码的扩展,主要功能有 堆栈跟踪 代码覆盖率分析 垃圾收集统计 远程调试 其中最有用的功能就属远程调试了,下面就一步步来搭建xdebug。从sublime转到atom后,发现ato...

    Eirunye 评论0 收藏0
  • 插件分享大会[不定期更新]

    摘要:最近老是在重装系统,每次重装就要重新配置环境,安装软件,安装插件。因为基本只有这个插件,才可以设置一个文件夹下三个项目能分别传到不同的服务器中。在全球最大的同性交友网站中,只要鼠标悬停到一个项目上时,就会在一个弹窗显示该项目的信息。 最近老是在重装系统,每次重装就要重新配置环境,安装软件,安装插件。每次重装的时候,都不知道自己以前到底用过什么软件插件。所以,还是写一篇文章记录下来,顺便...

    CastlePeaK 评论0 收藏0
  • 插件分享大会[不定期更新]

    摘要:最近老是在重装系统,每次重装就要重新配置环境,安装软件,安装插件。因为基本只有这个插件,才可以设置一个文件夹下三个项目能分别传到不同的服务器中。在全球最大的同性交友网站中,只要鼠标悬停到一个项目上时,就会在一个弹窗显示该项目的信息。 最近老是在重装系统,每次重装就要重新配置环境,安装软件,安装插件。每次重装的时候,都不知道自己以前到底用过什么软件插件。所以,还是写一篇文章记录下来,顺便...

    darkbug 评论0 收藏0
  • 专为 Laravel 定制的 Visual Studio Code 编辑器

    摘要:此扩展使用安装在已打开的工作区文件夹内的库。此扩展由开发,是一个与之间的调试适配器。它具有零依赖性,并可以极大程度地工作于任何规模的项目里。查看先前文件的拷贝或者将其与工作区版本或先前版本进行比较,查看编辑器里对活动行的更改。 showImg(https://segmentfault.com/img/remote/1460000018002818?w=1223&h=630); 嗨 工匠...

    Mertens 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<