【问题标题】:How to enable Xdebug for MacOS Big Sur? "php -m" show its ok, but "phpinfo();" don't如何为 MacOS Big Sur 启用 Xdebug? “php -m”显示正常,但“phpinfo();”别
【发布时间】:2020-09-16 21:35:28
【问题描述】:

我刚刚将我的 MacOS 更新到 Big Sur,我的 localhost 配置一团糟。重新安装 PHP 和 Xdebug 后,我的 Xdebug 似乎无法正常工作。我可以看到它是通过php -m 安装的,但它没有在phpinfo(); 中列出。另外,如果我打开 VSCode,启动“Listen for XDebug”,向文件添加断点并运行php -e FILENAME.php,断点有效,但如果我使用浏览器执行相同操作,则不会。

已经尝试过使用自制软件的官方教程和其他几个教程,从手动安装到自动完成所有工作。我这里没有线索,欢迎任何帮助或想法。提前致谢。

下面是我的配置:

  • PHP:7.4.10
  • php.ini 中的 Xdebug 配置
[xdebug]
zend_extension="/usr/local/Cellar/php/7.4.10/lib/php/20190902/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
  • VSCode 启动.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "xdebugSettings": {
                "max_data": -1
            }
        }
    ]
}
  • “php -m”输出
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
intl
json
ldap
libxml
mbstring
mysqli
mysqlnd
odbc
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
Phar
phpdbg_webhelper
posix
pspell
readline
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
  • phpinfo() 输出(由于 stackoverflow 在此处添加限制而压缩)
PHP logo
PHP Version 7.4.10
...
Server API  Apache 2.0 Handler
Virtual Directory Support   disabled
Configuration File (php.ini) Path   /usr/local/etc/php/7.4
Loaded Configuration File   /usr/local/etc/php/7.4/php.ini
Scan this dir for additional .ini files /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed    /usr/local/etc/php/7.4/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.4/conf.d/ext-xdebug.ini
PHP API 20190902
PHP Extension   20190902
Zend Extension  320190902
Zend Extension Build    API320190902,NTS
PHP Extension Build API20190902,NTS
...
This program makes use of the Zend Scripting Language Engine:
Zend Engine v3.4.0, Copyright (c) Zend Technologies
...

编辑:仔细检查“php -i”和“phpinfo();”,提到相同的 php.ini 文件:/usr/local/etc/php/7.4/php.ini

【问题讨论】:

  • 1) 这个phpinfo() 输出是如何被捕获的:通过CLI 还是浏览器? 2)据我了解,您正在尝试调试网页,对吗?问题是,在 Mac 和 Linux 上,为 CLI 和 Web 服务器提供 separate php.ini 是很常见的。仔细检查 CLI 和浏览器中使用了哪些配置文件(例如“加载的配置文件 /usr/local/etc/php/7.4/php.ini”、“解析的附加 .ini 文件 /usr/local/etc/php/7.4 /conf.d/ext-opcache.ini, /usr/local/etc/php/7.4/conf.d/ext-xdebug.ini"
  • 我也遇到了与 mongodb.so 类似的问题。有任何使用本机 httpd 的解决方法吗?我宁愿不必为了使用一些扩展而安装 Mac OS 自带的所有内容的副本。有人知道这些 so 文件的签名分发吗?

标签: php macos visual-studio-code xdebug


【解决方案1】:

这是我为使 xdebug 在 Big Sur 下工作所做的工作

有两个签名文件位于 /usr/lib/php/extensions/no-debug-non-zts-20180731 - xdebug.so 和 opcache.so 但它们不适用于高于 7.3 的 PHP

如果你可以降级到 7.3 那么

  1. 使用brew安装php 7.3:brew install php@7.3
  2. 根据 brew 说明更新 httpd.conf
  3. 如果你在不同版本下切换到7.3:brew unlink php && brew link --force --overwrite php@7.3
  4. 在 7.3 php.ini 末尾添加此部分:
    [xdebug]
    zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so"
    xdebug.remote_enable = 1
    xdebug.remote_autostart = 1
  1. 重启 Apache 服务器

  2. 检查 Xdebug 是否启用:php -i | grep "xdebug 支持"

【讨论】:

    【解决方案2】:

    当我升级到 big sur 后出现这个问题时,它是由以下原因引起的:

    加载 /usr/local/lib/php/pecl/20200930/xdebug.so 失败: dlopen(/usr/local/lib/php/pecl/20200930/xdebug.so, 9): 不合适 找到的图像。发现: /usr/local/lib/php/pecl/20200930/xdebug.so:(/usr/local/lib/php/pecl/20200930/xdebug.so)中的代码签名无效 使用库验证的过程:映射文件没有 cdhash, 完全未签名?代码必须至少是临时签名的。

    在尝试创建/查找签名的 xdebug.so 或在我的 Mac 上关闭签名验证太久之后,我最终通过使用 brew 安装新的 httpd 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2014-08-03
      • 2019-09-23
      • 1970-01-01
      • 2015-04-21
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多