Xdebug 已加载,但未作为 zend 扩展加载。这是什么意思?如何解决这个问题?
6 回答
这个错误意味着你使用了“extension=”来加载 Xdebug。这可能在您的普通 php.ini 中,或者在某些发行版喜欢添加的名为 xdebug.ini 的文件中。在任何情况下,Xdebug 都需要作为 Zend 扩展加载某些功能,例如单步调试。由于 Xdebug 不打算作为普通扩展工作,它也可能崩溃和烧毁。
将 Xdebug 作为 Zend 扩展加载的语法取决于 PHP 版本和构建。我建议您使用http://xdebug.org/wizard.php为您提供正确的行。
确保它是否配置为正确加载为zend_extension
. 在里面php.ini
添加这一行
zend_extension="/usr/local/php/modules/xdebug.so"
其他人已经解释过该错误是因为 Xdebug 是作为常规 PHP 模块而不是作为 Zend 扩展加载的。您可以使用 Derick 链接的向导或手动输入 Starx 显示的行。
但是,您可能会遇到一个问题。目前该extensions_dir
指令php.ini
仅适用于 PHP 模块,不适用于 Zend 扩展。因此,您不能使用这样的通用配置:
[PHP]
extension_dir = .\ext
extension = php_memcache.dll
…
[zend]
zend_extension = php_xdebug-2.2.3-5.3-vc9-nts.dll
虽然 PHP 会php_memcache.dll
从ext
子目录正确加载,但它不会加载php_xdebug-2.2.3-5.3-vc9-nts.dll
并会抛出错误Failed loading php_xdebug-2.2.3-5.3-vc9-nts.dll
。
要解决此问题,您将需要使用完全限定/绝对路径,例如:
zend_extension = C:\foobar\PHP\ext\php_xdebug-2.2.3-5.3-vc9-nts.dll
或诸如此类的相对路径:
zend_extension = ext\php_xdebug-2.2.3-5.3-vc9-nts.dll
zend_extension = ..\phpexts\php_xdebug-2.2.3-5.3-vc9-nts.dll
zend_extension = \dev\phpexts\php_xdebug-2.2.3-5.3-vc9-nts.dll
(向导将返回zend_extension=.\ext\php_xdebug-2.2.3-5.3-vc9-nts.dll
其中包括目录但也是多余的.\
)
如果要在 Windows 服务器上激活文件,zend*nts*.dll
则php.ini
必须使用zend_extension_ts
指令而不是zend_extension
Example 来加载 xdebug :
[XDeug]
zend_extension_ts="DRIVE:/PATH_TO_XDEBUG/php_xdebug.dll"
xdebug.show_local_vars=1
xdebug.default_enable=On
注意:您的 dll 文件的双引号
希望这会帮助某人:)
如果您在尝试构建xdebug 时来到这里,那么这意味着您已将其构建为“静态”扩展(不是 zend 扩展)。
您可以使用configure --with-xdebug=shared
将其构建为共享扩展(dll/so;您应该看到一个表格,显示 xdebug 现在已配置为构建为共享扩展而不是静态扩展),以便之后可以将其作为 zend 扩展加载。
我不知道你是否可以制作静态 zend 扩展。
另外,请注意,运行完整的 xdebug 测试套件需要不激活 opcache ( configure --disable-opcache --with-xdebug=shared
)
为我工作:在 php.ini
zend_extension = php_xdebug-3.0.4-8.0-vs16-x86_64.dll