0

我总是收到关于幕后工作原理的奇怪问题。我知道如何从源代码编译 php,并且我知道如果您从源代码编译它而忘记添加模块/库,则需要重新编译 php 以添加它。但是,如果您使用 yum 安装 php,然后您想添加另一个扩展,您只需要安装该扩展。例如,今天我在一台最近安装的 Fedora 18 机器上工作,而 php 缺少 DOM 库,这很奇怪,因为默认情况下启用了该库。似乎 yum 安装了禁用该扩展的 php。无论如何,由于它丢失了,我不得不这样做:

sudo yum install php-xml

这解决了问题,但它让我想知道,这种情况下的安装过程如何?php重新编译了吗?如果是这样,它如何记住之前可能添加的所有其他扩展?或者是单独安装了xml扩展并以某种方式链接到php?

我还没有找到任何有关此的信息,我真的很好奇它是如何工作的。

4

3 回答 3

1

当您使用 yum 或 apt-get 之类的包管理器安装 php 扩展包时,存储库已经为系统附带的 php 版本编译了 so 扩展。例如,如果您使用的是 Ubuntu 12.04,并且执行了 apt-get install php-mysqlnd,它会从包含预编译的 mysqlnd.so 和默认 mysqlnd.ini 的存储库中获取 deb 包。这是有效的,因为 deb 包具有根据为 12.04 版本安装的默认依赖项的编译版本。如果缺少某些依赖项,则会获取相同的预编译 deb 包,从而无需配置和制作。这使它更快更容易。几乎即插即用!

于 2013-06-14T07:00:22.200 回答
1

您可以单独构建扩展,您不必每次需要添加新扩展时都重新构建您的 php,您只需要[extensions]在您的php.ini.

当您构建 php 时,您可以指定哪些扩展需要静态(包含)在 php 二进制文件中,而哪些扩展是您想要的共享库。

configure --enable-http=static --with-openssl=shared
// http extension will be included in PHP
// openssl extension will be compiled as separate DLL
于 2013-06-14T04:47:06.053 回答
0

Yum 连接到预编译 rpm 的存储库。Yum 将下载 rpm 及其依赖项并安装它们。

Yum 将为不同的操作系统使用不同的存储库。例如,Fedora 18 具有与 Fedora 17 不同的预编译 rpm 存储库。

Yum 只是一个美化的依赖管理系统

于 2013-06-14T04:31:05.317 回答