PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0

PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0

使用pecl安装的xdebug,使用apache php5.3运行没问题,但是在使用cli运行php时出现上面的警告。

问题的根源在于使用pecl安装的xdebug会自动在你的php.ini中增加extension="xdebug.so" ,但是根据xdebug官方的安装文档说法,xdebug只能使用zend_extension加载扩展,使用extension会有问题的。所以修改php.ini中的extension="xdebug.so"zend_extension="/path/xdebug.so"即可。注意使用zend_extension需要指定xdebug.so的全路径。使用sudo find / -name xdebug.so即可找到你的xdebug.so文件的路径。

关于extension和zend_extension的区别可以看这里:extension和zend_extension的区别

extension,zend_extension和zend_extension_ts

extension是php扩展

zend_extension为zend engine扩展

zend engine是php脚本解释引擎,zend engine 2(ZE2)与php 5同时发布,php 5开始使用ZE2作为脚本解释引擎;php 6目前还处于开发阶段,但已经引入zend engine 3(ZE3)。

所以,php有2种扩展,一个基于zend engine引擎的,一个是php自身的。才会出现有些扩展使用extension,有些使用zend_extension来引用。

与zend_extension相关的,还有以下指令:

  • zend_extension
    (non ZTS, non debug build)
  • zend_extension_ts
    ( ZTS, non debug build)
  • zend_extension_debug
    (non ZTS, debug build)
  • zend_extension_debug_ts
    ( ZTS, debug build)

ZTS全称为:ZEND Thread Safety(线程安全)

查看你的php是否为线程安全,可以检查phpinfo()中的Thread Safety的值,enable为线程安全,disable为非线程安全。