Почему PHPinfo имеет версию заголовка и версию библиотеки? Каковы различия?

У меня есть несогласованность, и я не мог правильно выровнять их версии, поэтому мне просто захотелось удалить версию библиотеки. Я могу сделать это? Является ли версия заголовка для PHP, а библиотека – из моего дистрибутива? Могу ли я обновить библиотечную версию PHP? Если да, то как? Я использую PHP 5.4.4

Например, phpinfo

Related of "Почему PHPinfo имеет версию заголовка и версию библиотеки? Каковы различия?"

Об этом обычно говорят в обновленных версиях 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.