PHP 扩展/模块文件结构逻辑基于什么?

PHP 扩展/模块文件结构逻辑基于什么?

我正在尝试在 Linux/Slackware 12 上配置/构建 PHP 5.3.10,但是当我运行 make install 时扩展出现在错误的目录中。

在 php.ini 文件中定义了扩展目录:

/usr/lib/php/extensions

问题是,当我运行“make install”时,新构建的扩展会被复制到扩展目录中的子文件夹中:

/usr/lib/php/extensions/no-debug-non-zts-20090626

我该怎么办呢...

  • 将文件从 no-debug-non-zts-20090626 目录复制到扩展目录中,

  • 从扩展到 no-debug-non-zts-20090626 目录中的模块创建符号链接(这将花费大量时间)

  • 或者是什么?

(我知道我可以做任何一件事,但我想知道正确的方式...)

答案1

如果这些不是 zend 扩展,则您无需执行任何操作。如果您使用(例如):

extension="suhosin.so"

PHP 会找到并加载它。运行以下命令即可看到,您的 PHP 版本已有一个默认扩展目录:

php-config --extension-dir

“20090626”是使用的 PHP API 版本,因此您可以在服务器中运行不同的 PHP 版本,每个版本都使用自己的扩展。或者,如果只使用一个版本,那么当您在 API 版本之间升级时(从 PHP 5.2 [20060613]、5.3 [20090626] 或 5.4 [20100412] 等),您的旧扩展不会破坏 PHP。

但为了使其工作,您需要: - 将扩展保留在构建脚本将其复制的位置。 - 仅使用其“name.so”而不是完整路径加载扩展。

您可以通过运行以下命令检查 PHP API 版本:

phpize -v

因此,当您编译扩展时,您运行 phpize,它会设置一些变量(包括正确的扩展目录),以便当“configure”脚本创建 Makefile 时,将其设置为“/usr/lib/php/extensions/no-debug-non-zts-20090626”(在本例中)。

我也在几台服务器上使用 Slackware,通常我只是将扩展文件留在构建脚本安装的位置。

如果您使用 phpinfo() 语句创建测试脚本,您可以找到“extension_dir”配置选项的值,该值在您的服务器中将是“/usr/lib/php/extensions/no-debug-non-zts-20090626”,除非您在 php.ini 文件中将其设置为其他值。

请注意,这主要是 linux/unix 的事情,在 Windows 中通常必须明确设置 extension_dir 变量。

相关内容