我有一个不一致的地方,我无法正确对齐他们的版本,所以我只想删除库版本。我可以这样做吗?是库的头版本,而库来自我的发行版?我可以升级PHP的库版本吗?如果是这样,怎么样?我使用的是PHP 5.4.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-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
。
答案 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才能更新