用模块编译php和使用共享模块?

时间:2009-08-10 13:57:51

标签: php

使用参数编译php有什么区别:

--with-[extension name]

而不是仅将其编译为共享模块并将其包含在内?有任何性能优势吗?如果没有,你为什么要这样做?

5 个答案:

答案 0 :(得分:2)

也许这不是你问题的完整答案,但是到目前为止我能找到的是:“扩展和嵌入PHP strong>“,由Sara Golemon撰写(amazon;某些部分也可在Google图书上找到。)

相关部分(第56页上方的注释)是:

  

有没有想过为什么有些扩展   使用--enable-extname和   一些配置使用   --with-extename?功能上,两者之间没有区别。在   但是,实践是--enable   可以打开的功能   无需任何第三方   库。相比之下,--with是   意味着有这样的功能   先决条件。

所以,没有关于性能的单词(我想,如果存在差异,只需要“加载一个文件”vs“加载一个更大的文件< / em>“);但这种可能性背后有技术上的原因。

我想这样做是因为PHP本身不会需要一个额外的外部库,因为有些扩展;使用正确的选项允许用户自己启用或禁用扩展,具体取决于他们是否已拥有该外部库。

答案 1 :(得分:2)

内存占用可能存在差异?

如果我错了,请纠正我,但在内存中加载的每个进程中都会复制内置模块(因为它是静态链接的),而共享模块只加载一次并由所有php进程共享。

答案 2 :(得分:1)

我注意到当加载所有函数作为共享模块时,php页面加载速度更快,cpu使用率更低,但是某些命令行php函数无法正常工作。合乎逻辑的假设共享模块设置比大型静态二进制文件更有效,因为模块只在需要时加载。

答案 3 :(得分:0)

任何表现利益都可以忽略不计。它只是打包PHP版本的另一种选择。

在我的Mac上,我使用Marc Liyange’s build of PHP,其中包括内置的PostgreSQL支持。它是使用--with-pdo-pgsql标志构建的。因此,它不需要与pdo-pgsql共享库一起分发。

如果他没有使用--with-pdo-pgsql构建,他将需要分发pdo-pgsql共享库并在php.ini中包含一个指令来加载它。当然,这只是一个小小的差异,但是如果你知道你将要使用这个功能,可以将它构建到PHP本身。

答案 4 :(得分:0)

我认为Nate对于性能是正确的,而且这个选项只对包装有帮助。

基本上使用编译模块,PHP可以直接调用模块函数,但是在编译之后,这些调用被转换为要调用的内存地址。

在可加载模块版本中,PHP将调用dl_open来加载库,然后通过那些地址来调用函数,就像编译版本那样。我猜这个dl_open调用只在web服务器启动时完成一次,所以你可以忽略它。