
Debian 8に非常に古いPHPバージョンをインストールしたいと思います。それはPHP 5.1.0です。私はできます。いいえ本番環境で使用してください。テスト目的でのみ使用してください。ただし、コンパイルしようとすると、domモジュールに問題が発生します。いくつかの調査の最後に、libxml2バージョン> = 2.9が以前のPHPバージョンで問題を引き起こすことがわかりました。 libxml2 2.8をコンパイルしてどこかに保存し、それを使ってPHP 5.1をコンパイルすることができるかどうかを知りたいです。可能であればどうするか教えていただけますか?
答え1
確かにできますが面倒です。新しいライブラリを以前のライブラリで上書きするリスクを回避したくないので、libxml 2.8を./configure --prefix=/path/to/prefix/
PHP 5.1.0(例:/opt/php510/
または)と/usr/local/php510/
は別のプレフィックス()に付けました。 libxml 2.8を静的に構築すると、PHPと調和してプログラムを起動するときに「共有ライブラリの地獄」を避けるのが最善です。通常、これは--disable-shared --enable-static
設定フラグを追加することによって行われます。
次に、PHP側で同じプレフィックスを使用するように設定し、GCC呼び出しにlibxml 2.8ライブラリパスを追加する必要があります。 autoconfを使用してビルドした場合(./configure
通常はスクリプトはautoconfで生成されます)、次のことを実行する必要がありますCFLAGS=-I/opt/php510/include LDFLAGS=-L/opt/php510/lib ./configure --prefix=/opt/php510
。
.o
CFLAGSは、オブジェクトファイルの作成時にgccに渡されるパラメータを含む変数です。デフォルトのリスト(通常はIIRC)を表示する前に、-I/path
ヘッダファイル( "includes"または.h
ファイル)を見つけるようにGCCに指示します。/path
/usr/include
/include
- LDFLAGSはリンカに渡された引数を含む変数です(通常、実行可能プログラムにファイルを結合するリンカとしても使用できますが、
ld
autoconfは両方の用途でこの変数を尊重します)。のリンカーに教えてください。gcc
.o
-L/path
.a
.so
/path
libxml 2.8を共有ライブラリにリンクすると、これについて何も知らないため、libxml.so.2.8 not found
同様のエラーが発生します。これが私が静的にリンクされたバージョンを使用することをお勧めする理由です。/etc/ld.so.conf
/opt/php510/lib
これを行うのに問題がある場合、または別のビルドシステムを使用している場合はお知らせください。
アンインストールされた関数の古いサポートの中断通知を見つけるのが難しい場合でも、PHPを混乱させるlibxml> = 2.9バージョンのすべての関数を使用するように変更することもできます。