“XDEBUG NOT LOADED AS ZEND EXTENSION”警告是啥意思?
Posted
技术标签:
【中文标题】“XDEBUG NOT LOADED AS ZEND EXTENSION”警告是啥意思?【英文标题】:What does "XDEBUG NOT LOADED AS ZEND EXTENSION" warning means?“XDEBUG NOT LOADED AS ZEND EXTENSION”警告是什么意思? 【发布时间】:2012-04-06 07:39:41 【问题描述】:Xdebug 已加载,但未作为 zend 扩展加载。这是什么意思?如何解决这个问题?
【问题讨论】:
你的配置是什么?你的 php.ini 里面有什么? (zend_extension_debug=*
)。更多细节将不胜感激。
你怎么知道它不是作为zend扩展加载的?你在哪里读到的?可以提供截图吗?
【参考方案1】:
此错误表示您使用“extension=”加载 Xdebug。这可能在您的普通 php.ini 中,或者在某些发行版喜欢添加的名为 xdebug.ini 的文件中。在任何情况下,Xdebug 都需要作为 Zend 扩展加载某些功能,例如单步调试。由于 Xdebug 不能作为普通扩展运行,它也可能崩溃和烧毁。
将 Xdebug 作为 Zend 扩展加载的语法取决于 PHP 版本和构建。我建议您使用http://xdebug.org/wizard.php 为您提供正确的线路。
【讨论】:
“无论如何,Xdebug 需要作为 Zend 扩展加载”——你能解释一下原因吗?当我通过 PECL 安装 xdebug 时,我被告知将“extension=xdebug.so”添加到我的 php.ini 中,并且 phpinfo() 报告了有关 xdebug 的安装和工作方式的各种优点,但它也提醒我它是“没有作为 Zend 扩展加载”,没有任何解释为什么我会关心。 至少在 Windows 中,xdebug 向导犯了一个小错误:它建议添加类似zend_extension = C:\Program Files (x86)\PHP\v5.3\ext\php_xdebug-2.2.1-5.3-vc9-nts.dll
的内容。实际工作应该是zend_extension = "C:\Program Files (x86)\PHP\v5.3\ext\php_xdebug-2.2.1-5.3-vc9-nts.dll"
。
@texnic 谢谢!向导声明将“zend_extension = ext\”添加到 php.ini。应该说将 xdebug.dll 添加为扩展路径的一部分,例如:“zend_extension = ext\php_xdebug-2.2.2.dll”。我浪费了 30 分钟试图弄清楚这一点。
这让我发疯了,xdebug 现在可以工作了,非常感谢 :)
@CharlieS,我已经在回答中澄清了这一点。我也认为 PECL 现在终于修复了,但我不确定是否已经发布。【参考方案2】:
确保它是否配置为正确加载为zend_extension
。在php.ini
里面添加这一行
zend_extension="/usr/local/php/modules/xdebug.so"
【讨论】:
在我的 CentOS 6 安装中,它是:zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so
(另外,我的 web 根目录中有一个本地 php.ini,它覆盖了默认的 php.ini。看来我必须添加如果我希望它在该网络路径内工作,则在此处进行指令。)【参考方案3】:
其他人已经解释过该错误是因为 Xdebug 作为常规 PHP 模块而不是作为 Zend 扩展加载。您可以使用 Derick 链接的 wizard 或手动输入 Starx 显示的行。
但是,您可能会遇到一个问题。 php.ini
中的 extensions_dir
指令目前仅适用于 PHP 模块 not to Zend extensions。因此,您不能使用这样的通用配置:
[PHP]
extension_dir = .\ext
extension = php_memcache.dll
…
[zend]
zend_extension = php_xdebug-2.2.3-5.3-vc9-nts.dll
虽然 PHP 会从 ext
子目录正确加载 php_memcache.dll
,但它不会加载 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
,其中包括目录但还有一个多余的.\
)
【讨论】:
【参考方案4】:如果您想在 Windows 服务器上将 zend*nts*.dll
激活到您的 php.ini
文件中,则必须使用 zend_extension_ts
指令而不是 zend_extension
加载 xdebug 的示例:
[XDeug]
zend_extension_ts="DRIVE:/PATH_TO_XDEBUG/php_xdebug.dll"
xdebug.show_local_vars=1
xdebug.default_enable=On
注意:您的 dll 文件的双引号
希望对某人有所帮助:)
【讨论】:
【参考方案5】:如果您在尝试构建 xdebug 时遇到此问题,则意味着您已将其构建为“静态”扩展(不是 zend 扩展)。
您可以使用configure --with-xdebug=shared
将其构建为共享扩展(dll/so;您应该会看到一个表格,显示 xdebug 现在已配置为构建为共享扩展而不是静态扩展),以便可以加载它之后作为 zend 扩展。
不知道能不能做一个静态的zend扩展。
另外,请注意,运行完整的 xdebug 测试套件需要不激活 opcache (configure --disable-opcache --with-xdebug=shared
)
【讨论】:
【参考方案6】:为我工作:在 php.ini 中
zend_extension = php_xdebug-3.0.4-8.0-vs16-x86_64.dll
【讨论】:
以上是关于“XDEBUG NOT LOADED AS ZEND EXTENSION”警告是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章