8

我有一个不一致的地方,我无法正确对齐他们的版本,所以我只想删除库版本。我可以这样做吗?当库来自我的发行版时,是 PHP 的标头版本吗?我可以升级 PHP 的库版本吗?如果是这样,怎么做?我正在使用 PHP 5.4.4

例如, phpinfo

4

5 回答 5

4

当库来自我的发行版时,是 PHP 的标头版本吗?

这意味着它是针对 1.0.1 头文件编译的,但现在是针对 0.9.8 动态链接的。因此,您使用的版本比编译 PHP 时使用的版本旧。

许多库将版本存储在头文件中。因此,当程序使用该库时,它可以执行类似的操作int HEADER_FOO_VERSION = LIBRARY_VERSION,将版本号嵌入到程序中(例如,php)。现在,当该程序运行时,它会动态链接库,这可能与主机系统上的库不同。

该库可能有一个函数调用,比如int get_library_version(). 所以程序(PHP)可以检查是否HEADER_FOO_VERSION == get_library_version(). 如果不同,则可能存在兼容性问题。(当然,它不必分配给局部变量......我只是想把头版本号编译成php,并且无论哪个版本的库都保持不变正在运行时使用。)

是否有问题取决于两个版本是否兼容。

通常,如果库大于标题,则可以。如果库比它链接的版本旧,那肯定更有可能成为问题。当然,这是因为不可能知道未来的版本可能会有什么变化。

因此,在您的情况下,我会尝试通过apt-get,yum等更新您系统的 SSL 库,以匹配 PHP 期望的版本。

要检查 php 在 Linux 上使用的版本:

$ ldd `which php` | grep ssl
  libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0

请注意,这which php只是找到完整路径的捷径。你可以硬编码任何你想检查的可执行文件:ldd /usr/sbin/httpd.

于 2012-07-15T20:12:13.720 回答
2

我自己不知道答案,但是当在谷歌上搜索时,一些很好的资源解释了同样的......

头文件和库有什么区别?

文件的版本是用于创建库的 phpinfo 中提到的版本。

希望对您有所帮助,如果在谷歌上搜索,有很多可用的资源。

仍然希望收到有关该问题的详细信息

于 2012-07-15T20:05:24.240 回答
2

标头版本是功能版本,而库版本是代码版本。

标头定义了接口——它告诉你库中有哪些函数。如果标头被更新,那么您需要检查以确保所有功能都相同,并查看是否添加或减去任何功能。

但是如果更新了一个库,而不是标题,这意味着所有的函数调用都是相同的,但是一些代码可能会改变(例如,错误修复)。

在您的示例中,PHP 看到 OpenSSL 1.0.1 的功能,但 OpenSSL 加载的源代码的实际版本是 0.9.8o

于 2012-07-15T20:14:31.007 回答
1

这在 openssl 的更新版本中很常见。发生的情况是库的较新版本存储在不同的文件夹中。位于 /usr/bin/openssl 的原始文件夹需要一个指向新文件夹 /usr/local/bin/openssl 的符号链接。这将使两者成为相同的版本或仅显示 OpenSSL 版本 _ (随便)

通常无需担心这一点,因为它仍然按照预期的方式工作。这在共享服务器上很常见。

编辑:

The information in this post is generic and can be different if you are running
CentOS, RedHat, Ubuntu, or another Linux/BSD version. Check documentation or man
pages for the best information

如果您确实更新了 OpenSSL,某些版本的 *nix 需要您重新构建 PHP 和 Apache 以使其更新

于 2012-07-15T20:10:51.583 回答
0

如果您从源代码重建 PHP,我发现了另一个可能导致不匹配的原因。它是如此简单,但如果您不熟悉在 Linux 上从源代码构建,不知道它会花费您很多时间。

答案在这里:https ://serverfault.com/a/567705/305059 - 不幸的是,我不能对这个不太有用的答案投票,所以如果你在那里有名声,请这样做。

您需要在“make”之前运行“make clean”才能重建所有二进制文件。奇怪的是,如果没有这一步,我得到的是更新的库版本,但是是旧的头文件版本——所以我认为它一定是重建了一些东西,但不是所有的东西。我的重建涉及链接到另一个位置的 curl 版本(使用 ssl 构建),这可能是它背后的原因。

无论如何,我希望这对某人有所帮助。感谢@velcrow 关于服务器故障。

于 2015-08-15T22:36:20.437 回答