【发布时间】:2021-03-29 12:23:49
【问题描述】:
我有php5-fpm 在Raspberry Pi 上运行并为网站提供服务。我已经安装了php5-xdebug 包并重新启动了php5-fpm,我希望已将其配置为远程调试到 127.0.0.1:9000。我把服务器放在9000 上用nc -l 9000 命令收听。
不幸的是,当我打开任何带有http://mysite/mypage.php?XDEBUG_SESSION=1nobody 事件的页面时,尝试连接到端口9000,因为它的控制台中没有任何字符。页面打开正常。
还有什么可以阻止 PHP 调试器工作?
尝试:
-
在
phpinfo页面上显示添加xdebug.remote_log=/var/log/xdebug.log,但没有效果:没有创建任何日志,页面立即出现。 -
在
php文件开头添加xdebug_break();也没有效果。没有停顿,没有日志。 -
更改端口并没有改变任何东西......
我最初的 phpinfo 如下:
Server API FPM/FastCGI
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php5/fpm
Loaded Configuration File /etc/php5/fpm/php.ini
Scan this dir for additional .ini files /etc/php5/fpm/conf.d
Additional .ini files parsed /etc/php5/fpm/conf.d/05-opcache.ini, /etc/php5/fpm/conf.d/10-pdo.ini, /etc/php5/fpm/conf.d/20-json.ini, /etc/php5/fpm/conf.d/20-readline.ini, /etc/php5/fpm/conf.d/20-xdebug.ini
PHP API 20131106
PHP Extension 20131226
Zend Extension 220131226
Zend Extension Build API220131226,NTS
PHP Extension Build API20131226,NTS
Debug Build no
Thread Safety disabled
Zend Signal Handling disabled
Zend Memory Manager enabled
Zend Multibyte Support provided by mbstring
IPv6 Support enabled
DTrace Support enabled
Registered PHP Streams https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
...
***
xdebug
xdebug support enabled
Version 2.2.5
IDE Key www-data
***
Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $
Directive Local Value Master Value
xdebug.auto_trace Off Off
...
xdebug.coverage_enable On On
xdebug.default_enable On On
xdebug.dump.COOKIE no value no value
xdebug.dump.ENV no value no value
xdebug.dump.FILES no value no value
xdebug.dump.GET no value no value
xdebug.dump.POST no value no value
xdebug.dump.REQUEST no value no value
xdebug.dump.SERVER no value no value
xdebug.dump.SESSION no value no value
xdebug.dump_globals On On
xdebug.dump_once On On
xdebug.dump_undefined Off Off
xdebug.extended_info On On
xdebug.file_link_format no value no value
xdebug.idekey no value no value
xdebug.max_nesting_level 100 100
xdebug.overload_var_dump On On
...
xdebug.remote_autostart Off Off
xdebug.remote_connect_back Off Off
xdebug.remote_cookie_expire_time 3600 3600
xdebug.remote_enable On On
xdebug.remote_handler dbgp dbgp
xdebug.remote_host 127.0.0.1 127.0.0.1
xdebug.remote_log no value no value
xdebug.remote_mode req req
xdebug.remote_port 9000 9000
xdebug.scream Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars Off Off
xdebug.show_mem_delta Off Off
xdebug.trace_enable_trigger Off Off
...
【问题讨论】:
-
1) 尝试在您的 PHP 代码中设置
xdebug.remote_autostart=On或添加xdebug_break();。现在 Xdebug 开始调试可能还不够(?XDEBUG_SESSION=1可能会这样做.. 但最好尝试XDEBUG_SESSION_START参数)2) 以防万一:确保您正在编辑正确的 php.ini 文件。 ini 文件作为 CLI 和 Web 服务器可能使用不同的配置 .. 所以最好使用与尝试调试相同的方式获取phpinfo() -
3) 启用 Xdebug 日志 (
xdebug.remote_log) 并查看它将在那里写入什么。 4) 最好使用另一个端口(例如9001或9003可以)——php-fpm 经常使用相同的 TCP 9000 来满足自己的需要(在这种情况下,Xdebug 将连接到php-fpm 而不是你的 VSCode——Xdebug 日志可以显示(基于典型的“离开”响应)) -
以防万一(因为我对您的第一段有点困惑):1)Xdebug 必须连接到您的调试客户端(据我所知是 VSCode)而不是您的 Web 服务器。 2) Xdebug 连接到客户端而不是其他方式(最常见的假设/错误)---2.xdebug.org/docs/remote#communication 3) Xdebug 端口/主机与网站主机/端口无关。特别是端口,如果它在同一主机上 - 它必须不同。
-
@LazyOne
nc -l 9000是一个套接字服务器,它会打印到控制台任何连接到端口 9000 的任何人设置的内容,我认为它会表明任何连接尝试,甚至不成功 -
你明白 127.0.0.1 是本地主机,不管你在哪台机器上?您必须使用调试器机器的 IP。
标签: php debugging xdebug php-5.6