У меня есть несогласованность, и я не мог правильно выровнять их версии, поэтому мне просто захотелось удалить версию библиотеки. Я могу сделать это? Является ли версия заголовка для PHP, а библиотека – из моего дистрибутива? Могу ли я обновить библиотечную версию PHP? Если да, то как? Я использую PHP 5.4.4
Например,
Об этом обычно говорят в обновленных версиях 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 для обновления
Является ли версия заголовка для 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 и остается постоянным независимо от того, какая версия библиотеки используется во время выполнения.)
Независимо от того, является ли это проблемой, зависит от совместимости двух версий.
Обычно, если библиотека> чем заголовок, вы в порядке. Вероятнее всего, это будет проблемой, если библиотека старше версии, с которой она была связана. Конечно, это потому, что невозможно узнать, какие изменения могут иметь будущие версии.
Поэтому в вашем случае я попытаюсь обновить библиотеки вашей системы SSL через apt-get
, yum
и т. Д., Чтобы соответствовать версии, ожидаемой 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
.
Я сам не знаю ответа, но когда искал в google некоторые хорошие ресурсы, объясняющие то же самое …..
В чем разница между файлом заголовка и библиотекой?
Версия файлов – это тот, который указан в phpinfo, используемом для создания библиотеки.
Надеюсь, что это поможет, есть много ресурсов, доступных при поиске в google.
Еще хотелось бы услышать от кого-то подробные сведения о вопросе
Версия заголовка – это версия функциональности , тогда как версия библиотеки – это версия кода .
Заголовок определяет интерфейс – он сообщает вам, какие функции находятся в библиотеке. Если заголовок обновляется, вам нужно проверить, чтобы все функции были одинаковыми, и посмотрите, добавлены ли они или вычтены.
Но если библиотека обновляется, а не заголовок, это означает, что все вызовы функций одинаковы, но некоторые из кода могут быть изменены (например, исправления ошибок).
В вашем примере PHP видит функциональность OpenSSL 1.0.1, но фактическая версия исходного кода, которую загружает OpenSSL, составляет 0.9.8o
Если вы перестраиваете PHP из исходного кода, я нашел еще одну возможную причину несоответствия. Это так просто, но если вы не знакомы с построением из источника на Linux, не зная, что это может стоить вам много времени.
Ответ здесь: https://serverfault.com/a/567705/305059 – к сожалению, я не могу его проголосовать за не очень полезный ответ, поэтому, если у вас есть репутация, пожалуйста, сделайте это.
Вам нужно запустить «make clean» перед «make», чтобы он мог восстановить все двоичные файлы. Как ни странно, без этого шага я получал обновленную версию библиотеки, но старую версию заголовка – поэтому я думаю, что он должен что-то перестроить, но не все. Моя перестройка включала связь с версией curl в другом месте (построенном с помощью ssl), что может быть причиной этого.
Во всяком случае, я надеюсь, что это поможет кому-то. Спасибо @velcrow на serverfault.