Ubuntu 12.04でPHP 5.2とPHP 5.3を同時に実行する

画像
旧バージョンのubuntu 10.04を別のサーバーに保管する必要はないように思えたため、この問題の解決策を探していました。 インストール時間〜1時間。 実行中の開発サーバーでインストールが実行されました。
Drupal 6および7の下の開発者、およびPHP 5.2をまだ使用しているすべての開発者にとって実際です。

Drupal 7はPHP 5.3では問題なく動作しますが、PHP 5.2ではDrupal 6の方がずっと快適です。 D6コアは長い間PHP 5.3と互換性がありますが、ほとんどの開発者はモジュールを新しいバージョンに更新する要求を受け取ったときに耐え難い問題を抱えています。 したがって、PHPの両方のバージョンが同時に機能する場合、D7およびD6の開発はより便利になります。 (また、5.2からサーバーを除外することにより、開発サーバーの管理と保守を非常に簡素化することに注意してください)

この問題を解決する1つの方法は、mod_php5を使用してPHP 5.3スクリプトを処理し、必要に応じてFastCGIモジュールを使用してPHP 5.2でスクリプトを処理することです。 したがって、Ubuntu 12.04の場合、リポジトリからPHP 5.3をインストールしてから、PHP 5.2を手動でコンパイルしてインストールできます。 リポジトリからPHP 5.3をインストールすることは、すでに実行されている可能性が非常に高い非常に簡単な操作なので、次のように見えることを決めてみましょう。

sudo apt-get install php5 php5-common php5-cli php5-dev php5-mysql phpmyadmin php5-pgsql phppgadmin php5-gd php5-mcrypt php5-curl php-pear libapache2-mod-php5 php5-xdebug php5-codesniffer

注目すべきことに、この投稿ではPHP 5.2のインストール方法に焦点を当てていますが、どちらのバージョンも同様に機能します。

PHPソースコードをダウンロードする

以前のサポートされていないリリースからソースコードをダウンロードすることから始めましょう

最初はバージョン5.2.10(このバージョンはステージサーバーにインストールされていました)で開始しましたが、構成段階でOpenSSLエラーによって突然停止しました。

/usr/include/openssl/conf.h:132:7: note: expected 'struct lhash_st_CONF_VALUE *' but argument is of type 'int *'
make: *** [ext/openssl/openssl.lo] Error 1


比較的簡単に適用できる修正を見つけることができませんでしたが、ステージは最新バージョン5.2.17で完了し、代わりに他の多くのエラーが発生しました。

さて、ソースをダウンロードして〜/ Downloads / php-5.2.17フォルダーに解凍します

mkdir -p ~/Downloads/php-5.2.17
cd ~/Downloads/php-5.2.17
wget museum.php.net/php5/php-5.2.17.tar.gz
tar zxf php-5.2.17.tar.gz


構成する

パッケージの構成を開始します。 次に、。/ configureのスクリプト呼び出しの例を示します。

./configure
sudo ./configure \
--prefix = / usr / share / php52 \
--datadir = / usr / share / php52 \
--mandir = / usr / share / man \
--bindir = / usr / bin / php52 \
--with-libdir = lib64 \
--includedir = / usr / include \
--sysconfdir = / etc / php52 / apache2 \
--with-config-file-path = / etc / php52 / cli \
--with-config-file-scan-dir = / etc / php52 / conf.d \
--localstatedir = / var \
--disable-debug \
--with-regex = php \
--disable-rpath \
--disable-static \
--disable-posix \
--with-pic \
--with-layout = GNU \
--with-pear = / usr / share / php \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--with-bz2 \
--enable-ctype \
--with-db4 \
--without-gdbm \
--with-iconv \
--enable-exif \
--enable-ftp \
--enable-cli \
--with-gettext \
--enable-mbstring \
--with-pcre-regex = / usr \
--enable-shmop \
--enable-sockets \
--enable-wddx \
--with-libxml-dir = / usr \
--with-zlib \
--with-kerberos = / usr \
--with-openssl = / usr \
--enable-soap \
--enable-zip \
--with-mhash \
--with-exec-dir = / usr / lib / php5 / libexec \
--mmなし\
--with-curl =共有、/ usr \
--with-zlib-dir = / usr \
--with-gd =共有、/ usr \
--enable-gd-native-ttf \
--with-gmp =共有、/ usr \
--with-jpeg-dir =共有、/ usr \
--with-xpm-dir =共有、/ usr / X11R6 \
--with-png-dir =共有、/ usr \
--with-freetype-dir =共有、/ usr \
--with-ttf =共有、/ usr \
--with-t1lib =共有、/ usr \
--with-ldap = shared、/ usr \
--with-mysql = shared、/ usr \
--with-mysqli =共有、/ usr / bin / mysql_config \
--with-pgsql = shared、/ usr \
--with-pspell =共有、/ usr \
--with-unixODBC =共有、/ usr \
--with-xsl =共有、/ usr \
--with-snmp =共有、/ usr \
--with-sqlite =共有、/ usr \
--with-tidy =共有、/ usr \
--with-xmlrpc =共有\
--enable-pdo =共有\
--without-pdo-dblib \
--with-pdo-mysql = shared、/ usr \
--with-pdo-pgsql = shared、/ usr \
--with-pdo-odbc =共有、unixODBC、/ usr \
--with-pdo-dblib = shared、/ usr \
--enable-force-cgi-redirect --enable-fastcgi \
--with-libdir = / lib / x86_64-linux-gnu \
--with-pdo-sqlite =共有\
--with-sqlite =共有\
--enable-ipv6 \
--with-mcrypt \
--with-imap-ssl

明らかに、適切なオプションを追加または削除することで、特定のニーズに合わせて調整できます。 必要な(または不要な)オプションの詳細については、PHPのドキュメントを参照してください。

エラー./configure

だから、これはおそらく箱から出して動作しないでしょう? ほとんどの場合、原因は依存関係の欠落です。 不要なライブラリとパッケージのインストールについてあまり心配していない場合は、この問題をワンショットで解決できます。

sudo apt-get install libxml2-dev libpcre3-dev libbz2-dev libcurl4-openssl-dev libdb4.8-dev libjpeg-dev libpng12-dev libxpm-dev libfreetype6-dev libmysqlclient-dev postgresql-server-dev-9.1 libt1-dev libgd2-xpm-dev libgmp-dev libsasl2-dev libmhash-dev unixodbc-dev freetds-dev libpspell-dev libsnmp-dev libtidy-dev libxslt1-dev libmcrypt-dev

不足している依存関係エラーを1つずつ修正し、本当に必要なパッケージのみをインストールすることもできます。

考えられるエラーのいくつかを見てみましょう(./configureスクリプトがエラーなしで実行され、メッセージが受信された場合、次のセクションに進むことができます
実行の最後にPHPを使用していただきありがとうございます


構成:エラー:xml2-configが見つかりません。 libxml2のインストールを確認してください。

このエラーにより、libxml2パッケージの存在を確認するように求められます。 実際には、これはその開発バージョンが欠落していることを意味します。

この問題の解決に役立つ手頃な価格のパッケージを見つけましょう。
$ apt-cache search libxml2 | grep dev
libcroco3-dev - Cascading Style Sheet (CSS) parsing and manipulation toolkit
libxml++2.6-dev - C++ interface to the GNOME XML library (libxml2)
libxml2-dev - Development files for the GNOME XML library
libgdome2-cpp-smart-dev - C++ bindings for GDome2 DOM implementation
libgdome2-dev - Development files for libgdome2
libgdome2-ocaml-dev - OCaml bindings for GDome2 DOM implementation
libgtkmathview-dev - rendering engine for MathML documents
libsp-gxmlcpp-dev - S+P C++ wrapper for Gnome libxml2/libxslt


libxml2-devに興味があり、インストールします:
sudo apt-get install libxml2-dev

同じ手順が欠落しているすべてのライブラリに適用されるため、最終的なインストールコマンドのみを提供します。

修正
構成:エラー:/ usrにpcre.hが見つかりませんでした
sudo apt-get install libpcre3-dev

構成:エラー:BZip2ディストリビューションを再インストールしてください
sudo apt-get install libbz2-dev

configure:エラー:libcurlディストリビューションを再インストールしてください-easy.hは/ include / curl /にあるべきです
sudo apt-get install libcurl4-openssl-dev

構成:エラー:DBA:必要なヘッダーファイルが見つかりませんでした。
db4メジャーバージョンを確認しています... configure:エラー:ヘッダーに異なるバージョンが含まれています
sudo apt-get install libdb4.8-dev

configure:error:libjpeg。(a | so)not found。
sudo apt-get install libjpeg-dev

configure:error:libpng。(a | so)not found。
sudo apt-get install libpng12-dev

configure:error:libXpm。(a | so)not found。
sudo apt-get install libxpm-dev

構成:エラー:freetype.hが見つかりません。
sudo apt-get install libfreetype6-dev

サーバー側拡張機能を構築するにはpostgresql-server-dev-XYを、クライアント側アプリケーションを構築するにはlibpq-devをインストールする必要があります。
構成:エラー:libpq-fe.hが見つかりません。 正しいPostgreSQLインストールパスを指定してください
sudo apt-get install postgresql-server-dev-9.1

FreeType 1サポートの確認...いいえ-代わりにFreeType 2.xを使用します
configure:エラー:t1libディストリビューションが正しくインストールされていません。 再インストールしてください。
sudo apt-get install libt1-dev

構成:エラー:/ usrの下にgd.hが見つかりません
sudo apt-get install libgd2-xpm-dev

構成:エラー:gmp.hが見つかりません
sudo apt-get install libgmp-dev

configure:エラー:/ usrの下にMySQLヘッダーファイルが見つかりません。
MySQLクライアントライブラリはもうバンドルされていないことに注意してください!
sudo apt-get install libmysqlclient-dev

構成:エラー:sasl.hが見つかりません!
sudo apt-get install libsasl2-dev

configure:エラー:libmhashを再インストールしてください-mhash.hが見つかりません
sudo apt-get install libmhash-dev

unixODBCサポートを確認しています... configure:error:ODBCヘッダーファイル '/usr/include/sqlext.h'が見つかりません!
sudo apt-get install unixodbc-dev

configure:エラー:ディレクトリ/ usrはFreeTDSインストールディレクトリではありません
sudo apt-get install freetds-dev

構成:エラー:pspellが見つかりません
sudo apt-get install libpspell-dev

構成:エラー:SNMP健全性チェックに失敗しました。 詳細については、config.logを確認してください。
sudo apt-get install libsnmp-dev

構成:エラー:libtidyが見つかりません
sudo apt-get install libtidy-dev

構成:エラー:xslt-configが見つかりません。 libxslt> = 1.1.0ディストリビューションを再インストールしてください
sudo apt-get install libxslt1-dev

構成:エラー:mcrypt.hが見つかりません。 libmcryptを再インストールしてください。
sudo apt-get install libmcrypt-dev

構成:エラー:OpenSSLのライブラリが見つかりません
./configureオプションに次を追加します。
--with-libdir = / lib / x86_64-linux-gnu

configure:error:拡張機能pdo_sqliteを静的にビルドするように構成しましたが、共有ビルド用に構成した拡張機能pdoに依存します。 ビルドを成功させるには、pdo_sqlite sharedをビルドするか、pdoを静的にビルドする必要があります。
options ./configureに次を追加します
--with-pdo-sqlite=shared
--with-sqlite=shared



作る
すべてが正しく、エラーなしでセットアップされていますか? 次に、コンパイルの時間です(および実行中にコーヒーを1杯):

sudo make
コーヒーを飲みながら、エラーのアプローチを待つことができます。

エラーを起こす

はい、すべてがここでうまくいかない可能性が非常に高いです。
以下に、2つのエラーと1つのエラーを示します。

修正
ext / openssl / .libs / xp_ssl.o:関数 `php_openssl_setup_crypto '内:
ext / openssl / xp_ssl.c:357: `SSLv2_server_method 'への未定義の参照
ext / openssl / xp_ssl.c:337: `SSLv2_client_method 'への未定義の参照

これは、このバグレポートに添付されたパッチを適用することで簡単に解決できるバグ#54736によるものです。

このパッチを〜/ Downloads / php-5.2.17フォルダーにダウンロードし、以下を実行します。
patch -p1 < debian_patches_disable_SSLv2_for_openssl_1_0_0.patch.patch

次のように、パッチの正常な適用に関するメッセージが表示されます。
patching file ext/openssl/xp_ssl.c
Hunk #1 succeeded at 332 (offset 4 lines).
Hunk #2 succeeded at 354 (offset 4 lines).
Hunk #3 succeeded at 583 (offset -50 lines).
Hunk #4 succeeded at 819 (offset -98 lines).


ext / gmp / gmp.c:関数 'zif_gmp_random'内:
ext / gmp / gmp.c:1399:69:エラー: '__GMP_BITS_PER_MP_LIMB'は宣言されていません(この関数で最初に使用)
ext / gmp / gmp.c:1399:69:注:各未宣言識別子は、表示される関数ごとに1回だけ報告されます

バグ#50990を修正する時が来ました
gmail dot comのsusan dot smith dot devによるコメントの1つで、魔法を行う次の作業ソリューションが提案されています。

非推奨の定数定義__GMP_BITS_PER_MP_LIMBGMP_LIMB_BITSに置き換えることで問題を解決しました 。これは以前のすべてのバージョンにあり、MPIRでも定義されています。


ext / gmp / gmp.cファイルを編集し、__ GMP_BITS_PER_MP_LIMBをGMP_LIMB_BITSに置き換える必要があります。 私の場合、1399行目でした。

ext / zip / lib / .libs / zip_dirent.o:関数「memset」:
/usr/include/x86_64-linux-gnu/bits/string3.h:82:警告:memsetが一定の長さゼロのパラメーターで使用されています。 これは、転置されたパラメータによる可能性があります

最後のバグ#53568、これは非常に簡単に修正できます。ext/ zip / lib / zip_dirent.cファイルを開き、478行目を置き換えます
memset(&tm, sizeof(tm), 0);

memset(&tm, 0, sizeof(tm));
これ以上の間違いはありません!


インストールする
新しいバージョンのPHP 5.2の最も簡単なインストールオプションは、次のコマンドです。
sudo make install
さらに、他のマシンで同じインストールを再度繰り返す場合、または将来のためにインストールパッケージファイルを保存するだけの場合は、次を実行できます。
sudo checkinstall

phpのインストールと一緒に? また、現在のディレクトリにdebパッケージを作成します。
これで、どのパスを選択しても、 ZRZ 5.2が/ usr / bin / php52にインストールされました。

Apache構成ファイル

構成ディレクトリ/ etc / php52 / apache2 /は、インストールプロセス中に既に作成されている必要があります(欠落している場合は作成します)。 ここで、PHP 5.3が使用するのと同じ拡張機能とモジュールを使用するようにPHP 5.2を構成する必要があります。

sudo ln -s /etc/php5/conf.d /etc/php52
sudo ln -s /etc/php5/cli /etc/php52


php.ini-recommendedファイルを新しいディレクトリにコピーします(次のステップで定義されます)
sudo cp php.ini-recommended /etc/php52/apache2/php.ini
必要に応じて、必要な設定を行います。

ApacheおよびFastCGI

次に行うことは、FastCGIを使用してPHP 5.2を実行するようにApacheを構成することです。 fastcgiモジュールのインストールを開始しましょう:
sudo apt-get install libapache2-mod-fastcgi

必要なモジュールがすべて有効になっていることを確認し、Apacheを再起動します。
sudo a2enmod cgi fastcgi actions
sudo service apache2 restart


PHPのFastCGIバージョンを実行するためのphp52-cgi実行可能スクリプトを作成し、/ usr / lib / cgi-bin /に配置します。
#!/bin/sh
PHPRC="/etc/php52/apache2/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /usr/bin/php52/php-cgi


PHPRCこのパラメーターはphp.iniを指します
PHP_FCGI_CHILDRENのスレッド数
PHP_FCGI_MAX_REQUESTSリクエスト制限
これについては、 FastCGI Webサイトで詳しく知ることができます。

実行する権利を与える:
sudo chmod +x /usr/lib/cgi-bin/php52-cgi

最後に、PHP 5.2の使用を必要とする仮想ホストに使用される新しい/etc/apache2/php52.confファイルを作成します。
# Include file for virtual hosts that need to run PHP 5.2

<FilesMatch "\.php">
SetHandler application/x-httpd-php5


ScriptAlias / php52-cgi / usr / lib / cgi-bin / php52-cgi
アクションアプリケーション/ x-httpd-php5 / php52-cgi
AddHandlerアプリケーション/ x-httpd-php5 .php

FilesMatchはphpファイルハンドラをオーバーライドします。
ScriptAliasは CGIスクリプトへパスに触れます
AddHandlerは新しいハンドラーを登録します
アクションは、ハンドラーから転送されたファイルを操作するCGIスクリプトをアクティブにします。

ほとんどすべて!

1つだけ残っています。PHP5.2を使用するすべてのホストについて、設定ファイルに次の行を追加する必要があります。

Include php52.conf
そして、新しい構成をリロードします。
sudo service apache2 reload

おめでとうございます! これで、PHP 5.2とPHP 5.3のバージョンを同時に実行するサーバーができました!

PSすべてのタイプミスとコメントをPMに送信するようお願いします。 v

Source: https://habr.com/ru/post/J176147/


All Articles