不整合があり、バージョンを適切に調整できなかったため、ライブラリバージョンを削除したかっただけです。これはできますか?ライブラリが私のディストリビューションからのものである間、PHPのヘッダーバージョンはありますか?PHPのライブラリバージョンをアップグレードできますか?もしそうなら、どのように?PHP5.4.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にコンパイルでき、ライブラリのバージョンに関係なく一定のままであるという点を強調したいだけです実行時に使用されます。)
問題があるかどうかは、2 つのバージョンに互換性があるかどうかによって異なります。
通常、ライブラリがヘッダーよりも大きい場合は問題ありません。ライブラリがリンクされたバージョンよりも古い場合、問題になる可能性が高くなります。もちろん、これは、将来のバージョンでどのような変更が行われる可能性があるかを知ることが不可能だからです。
したがって、あなたの場合、PHPが期待するバージョンと一致するように、、などapt-get
を介してシステムのSSLライブラリを更新しようとします。yum
Linux で使用している php のバージョンを確認するには:
$ 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
.
私は自分で答えを知りませんが、グーグルで検索すると、同じことを説明するいくつかの素晴らしいリソースが.....
ファイルのバージョンは、ライブラリの作成に使用される phpinfo に記載されているものです。
Googleで検索すると、利用可能なリソースがたくさんあります。
それでも、質問について詳しく誰かから聞きたいと思います
ヘッダー バージョンは機能バージョンであり、ライブラリ バージョンはコードバージョンです。
ヘッダーはインターフェイスを定義します。これは、ライブラリ内にある関数を示します。ヘッダーが更新された場合は、すべての関数が同じであることを確認し、追加または削除されているかどうかを確認する必要があります。
ただし、ヘッダーではなくライブラリが更新された場合、すべての関数呼び出しは同じですが、コードの一部が変更される可能性があります (バグ修正など)。
あなたの例では、PHP は OpenSSL 1.0.1 の機能を認識していますが、OpenSSL がロードしているソース コードの実際のバージョンは 0.9.8o です。
これは、openssl の更新されたバージョンでよく見られます。ライブラリの新しいバージョンが別のフォルダーに保存されます。/usr/bin/openssl にある元のフォルダーには、新しいフォルダー /usr/local/bin/openssl へのシンボリック リンクが必要です。これにより、両方が同じバージョンになるか、単に OpenSSL Version _ (Whatever)が表示されます
意図したとおりに機能するため、通常はこれについて心配する必要はありません。これは、共有サーバーでよく見られます。
編集:
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 を再構築している場合、不一致の別の理由が考えられます。非常に単純ですが、Linux でソースからビルドすることに慣れていない場合は、多くの時間がかかることを知らないと気が済まないでしょう。
答えはここにあります: https://serverfault.com/a/567705/305059 - 残念ながら、あまり役に立たない答えに賛成票を投じることはできません。
すべてのバイナリを再構築するには、「make」の前に「make clean」を実行する必要があります。奇妙なことに、この手順を行わないと、更新されたライブラリ バージョンを取得していましたが、古いヘッダー バージョンを取得していたので、すべてではなく、何かを再構築したに違いないと思います。私の再構築には、別の場所 (ssl で構築された) にあるバージョンの curl へのリンクが含まれていました。これが原因である可能性があります。
とにかく、これが誰かに役立つことを願っています。serverfault の @velcrow に感謝します。