为什么PHPinfo有头版本和库版本?有什么区别?

时间:2012-07-15 19:42:47

标签: php openssl

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

例如, phpinfo

4 个答案:

答案 0 :(得分:3)

  

当库来自我的发行版时,是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-getyum等更新系统的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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:1)

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

What's the difference between a header file and a library?

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

希望它有所帮助,如果在谷歌搜索,有很多资源可供使用。

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

答案 3 :(得分: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才能更新