在php.ini文件中,“extension”和“zend_extension”有什么区别?

45

当我通过pecl安装Xdebug时,它向我的php.ini文件中添加了以下行。

extension="xdebug.so"

之前我用的一切工具都很好用,直到今天。

今天我在设置交互式调试的Xdebug时遇到了问题。 在将上述内容更改为以下内容之前,我无法让任何东西正常运行:

zend_extension="/usr/local/lib/php/extensions/xdebug.so"

(注意:我认为这是让我工作的原因,但我不确定百分之百)

这在我的脑海中引起了一个问题。通过extension=zend_extension加载扩展有什么区别?


事实上,我也没有读取说明。奇怪的是,extension=xdebug.so 允许我使用 xdebug_break() 进行远程调试,但不能使用 IDE 断点。 - Steve Clay
2个回答

40

Zend_extentions是构建在Zend引擎本身中的扩展。该引擎解析、解释和执行PHP脚本。更改引擎会改变PHP的工作方式。

下面的图将描述扩展和zend_extension之间的主要区别。

这两种类型的扩展共享许多功能。两者之间的区别主要在它们注册到引擎中的挂钩上。尽管这非常不常见,扩展既可以是PHP扩展也可以是Zend扩展。Xdebug就是一个很好的例子。

请查看以下图像以获得主要模式 Extensions和zend_extensions的比较

有关更多详细信息,请参阅此链接


我感激那个详细的链接,向我解释了Zend扩展无法静态编译到PHP中,这回答了我曾经提出的一个老问题。 - ck_

24

PHP语言的核心(更像是解释器,因为语言只是一份规范)是一个由Zend开发的软件(解释器、字节码编译器)叫做“Zend引擎”。

每个与该核心有关的模块都应安装为“zend_extension”。

然而,为了解决您的问题,请忽略这种解释的尝试,参考您正在配置的扩展的文档-http://www.xdebug.org/docs/install


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接