PHPの2つのバージョンをインストールし、それらを簡単に切り替える方法は?


76

UbuntuマシンにPHP 5.2.17とPHP 5.3.5の両方をインストールし、必要に応じて切り替えたいです。どうすればこれを達成できますか?


Ubuntuのでは/ etc / apache2の中apache.confがあり、私は多分私は将来的には、いくつかのパッケージには、Web開発者のために非常に有用であろうようになります、あまりにもこのことについて考えた

これはsuPHPで行うことができますが、詳細は不明です
マルコ・セピ

1
python virtualenvのようなものがあり、PHPの分離されたクリーンな展開を持っていますか?
レンザイ

ヘッドレス方式で使用する仮想化ソフトウェアを使用して、仮想Ubuntuサーバーをセットアップすることを検討しましたか?あなたがしたいことはそのようなセットアップによってうまく役に立たない(しゃれを意図していない)場合、私は驚かれることでしょう。
サイモン・ホエア

1
「簡単に切り替える」という意味を定義します。私はこれを仕事に使用しました。私のWebサーバーは異なるPHPを使用し.php.php5ファイルを使用していました。また、別のポート(のように別のPHPのバージョンを使用するようにWWWサーバを設定することができますhttp://localhost:80し、http://localhost:8080(のような)、または異なるドメインhttp://localphp52およびhttp://localphp53ので、あなたは簡単に電流を変化させることにより、2つの環境内の1つのWebアプリケーションを実行し比較することができます)そのままフォルダのすべての残りの構造を残しますURL。
cprn

回答:


61

これを実現するには、PHPバージョンマネージャーを使用できます。次のようなさまざまなバージョンマネージャが利用可能です。

私のお気に入りはphpbrewです。お役に立てれば。


2
ありがとう、指示を含めていただけますか?(onnu vishadheekarikkamo?)
タキオン

17
これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
ナネ

2
彼らのサイトに本当に良いドキュメントがあるリンクをチェックしてください。あなたは本当に彼らのウェブサイトから物をコピー&ペーストしてほしいですか?
aneeshep

7
皮肉なことに、リンクを投稿するだけではない理由の1つはlinkrotであり、この投稿が今や苦しんでいます。
MirroredFate

@aneeshep、ドキュメントをコピーアンドペーストするのではなく、関連する抜粋と、「phpバージョンマネージャー」とは何か、その特定の問題に対してどのように使用/構成するかについての数行を歓迎します。
マチュー

20

2つの異なるバージョンのPHPを一度に実行できます、aptを取得するほど簡単ではありません。個別にインストールされた1つのバージョンを実行し、Apache設定の設定に従って提供する必要があります。

たとえば、fastcgiを使用してこれを行うことができます。基本的に、探しているのはこのページに表示される構成です。必要なシチュエーション/ポート/ドメインに基づいて、構成に異なるハンドラーを追加します。両方のバージョンをインストールした後のトリックは、次のステップです。

===そのページから==

  1. 最後のステップは、仮想ホストを作成することでした。最後に、/ etc / apache2 / sites-enabledに3つのファイルがあります:000-default、php5.3.17およびphp5.4.7次の内容

デフォルト:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>

php5.3.17:

    <VirtualHost *:80>
      ServerName 5317.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>

php5.4.7:

    <VirtualHost *:80>
      ServerName 547.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php547.fcgi
      </Directory>
    </VirtualHost>

完全なインストールについては、リンクされた質問を参照してください。ヘッダー内の2つのリンクも忘れずに見ましょう。これらは素晴らしいチュートリアルのように見えます(ただし、圧縮率は低くなります)。これこれ

(リンクの質問はありません受け入れ答えと大きなものであるという事実によって方法がなければならないの入れ(とし)の作業罰金が、ユーザーが使用することを忘れてしまったことはありません<?phpし、使用され<?たコメントを参照してください、shorttagsをオフにして)


13

私はPHP 5.6と7.0をインストールしましたが、すべてのヒントに加えて5.6を実行し続けたので、このコマンドは時間を節約します(私の場合はオプション1を選択してApacheを再起動します):

sudo update-alternatives --config php

両方の値が異なる可能性があるため、使用を記憶しphpinfo()php -vクロスチェックすると便利です。
アディプラセティョ

6

これは私のために働く:https : //lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

「Growling Flea」のスクリプトと同じですが、新しいバージョンを使用しています。

PPAを追加します

PHP 5.6およびPHP 7.0パッケージはサードパーティのPPAからのものであり、Canonicalの公式のUbuntuリポジトリからは提供されません。ここでお勧めするPPAは、Debian用のPHPをパッケージ化するOndřejSurýによるものであり(これはUbuntuで使用されます)、公式リポジトリではありませんが、彼は完全にランダムではありません!PPA自体はここにあり ます

PPAをセットアップに追加するには:

sudo add-apt-repository ppa:ondrej/php  

次に、この新しいPPAから何が提供されているかについての情報も取得したいので、次を実行します。

sudo apt-get update   

新しいPHPバージョンをインストールする

私はすでにいくつかのphp5パッケージをインストールしていましたが、アンインストールはしませんでした。新しいバージョンをインストールするように依頼したときに、aptが何をしたいのかを考えさせました。

sudo apt-get install php5.6 php7.0

これにより、適切な競合や多くの競合から多くの苦情が寄せられました。最初に提案された解決策は、PHP 5.6をインストールできるように、すべての在庫のphp5パッケージを削除することでした。そのため、最初の提案を受け入れました。

私はapacheを使用しているので、このセットアップではphp5.6とphp7.0の両方のモジュールが利用可能で、php5.6モジュールが実際にロードされた状態でapacheを提供しました。

PHPだけでなく、PHPで期待するすべての拡張機能やその他のツールが両方のバージョンのPHPにあるため、必要なモジュールを簡単に追加できます。私はこれがいかにうまく行われているかに非常に感銘を受けました。

バージョンの構成と切り替え

これで、システムに2つの完全に異なるバージョンのPHPがインストールされたので、すべてのピースがどこに行ったのか見てみましょう。

設定ファイルは、すべてである/etc/php/5.6/etc/php/7.0 、それぞれ-内部ここであなたは、機能拡張がロードされる設定INI設定を設定し、単独で各バージョンの他のすべてのことができる場所です。

私はApacheユーザーであり、前述のように両方のモジュールが利用可能です。だから、一方から他方に切り替えるには、私がする必要があります:

sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart

nginxユーザーの場合、変更はほぼ同じくらい簡単です。DigitalOceanにはこれに関する優れたドキュメントがあり(素晴らしいドキュメントがあります!)、ガイドをチェックしてください:https : //www.digitalocean.com/community/tutorials/how-to- upgrade-to-php-7-on-ubuntu-14-04 には、nginxを再構成して別のバージョンのPHPを使用するためのセクションが含まれているためです。

コマンドラインから、php5.6とphp7.0の両方をコマンドとして使用できます。私にはまだphpコマンドがあります-/ etc / alternativesを見て、特定のバージョンのPHP cli *にシンボリックリンクされていることを確認してください。また、を実行することで、使用しているものをすばやく確認できphp -vます。

*より具体的には、どのphpを実行して、どのバージョンのPHPが使用さ/usr/bin/phpれているかを確認します/etc/alternatives/php

拡張機能の使用

このPPAには、PHPの両方のバージョンにpeclコマンドを提供する通常のphp-pearパッケージが付属しているため、PECLを介して利用できる拡張機能は通常の方法でインストールできます。関連するヘッダーも必要になるため、php5.6-devまたはphp7.0-devのいずれかをインストールする必要があります。

peclのインストールが完了すると、*。soファイルをphp.iniに追加するためのメモが表示されます。実際、ここで行うのに最適なのは、何が入って/etc/php/mods-availableいるかを調べることです。ここには既にいくつかのモジュールがあり、それぞれが拡張子にちなんで名付けられ、.iniで終わる独自のファイルにあります。1つをコピーしてテンプレートとして使用するか、独自のテンプレートを作成して、拡張機能に関連するすべての構成をそのテンプレートに配置できます(少なくとも、必要ですextension=[extensionName].so)。

新しい拡張機能が利用可能なMODになったら、有効にしてから以下を実行して確認します。

sudo phpenmod extension  
php -m  

これにより、現在のバージョンのPHPがこのモジュールをロードするための適切な場所にシンボリックリンクが作成されますphp -m。プロのヒント:出力に表示されない場合は、出力の一番上までスクロールして、有用なエラーメッセージがあるかどうかを確認します。


3

この投稿から、コマンドを順番に並べ、提供された順に順番に説明します(Ubuntu 12.04)

このメソッドはあなたに与えます:

  1. インストールされたPHPバージョン間の切り替えを許可するメニュー付きスクリプト(同時に両方ではない)

  2. サーバーにインストールされているさまざまなPHPバージョン

  3. 分離されたconfファイル

必要なすべてのバージョンをインストールします(2つあります)

依存関係をインストールします。

sudo apt-get install flex apache2-threaded-dev libxml2-dev apache2 apache2-mpm-prefork apache2-threaded-dev apache2-utils apache2.2-bin apache2.2-common

PHP 5.3を初めてインストールします。PHPソースをダウンロードする

md5sum Downloads/php-5.3.10.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.3.10.tar.bz2 .
tar xjf php-5.3.10.tar.bz2
cd php-5.3.10/
sudo mkdir /usr/local/php/php_5.3.10

PHP5.6を初めてインストールします。PHPソースをダウンロードする

md5sum Downloads/php-5.6.11.tar.bz2
mkdir ~/Sources
cd ~Sources/
cp -Rf ../Downloads/php-5.6.11.tar.bz2 .
tar xjf php-5.6.11.tar.bz2
cd php-5.6.11/
sudo mkdir /usr/local/php/php-5.6.11

スクリプトマネージャのバージョンのPHP:というファイルを作成php.shし、それを置きます/bin/

#!/bin/bash
opcion=0
cat << CABECERAMENU
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
CABECERAMENU
echo -n "Ingrese su eleccion: "
read opcion
echo
case $opcion in
    "1")
        rm /etc/apache2/php.conf
        ln -s /usr/local/php/php_5.3.10.conf /etc/apache2/php.conf
        /etc/init.d/apache2 restart
    ;;
    "2")
        rm /etc/apache2/php.conf
        ln -s /usr/local/php/php_5.6.11.conf /etc/apache2/php.conf
        /etc/init.d/apache2 restart
    ;;
    *)
        echo "Opcion no valida"
    ;;
esac

php 5.3をコンパイルしてインストールします。

cd ~/Sources/php-5.3.10/
sudo ./configure --prefix=/usr/local/php/php_5.3.10 --with-config-file-path=/usr/local/php/php_5.3.10/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --with-freetype-dir=/usr/lib/x86_64-linux-gnu  --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php-5.3.10/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.3.10/modules/
ls -lhart /usr/local/php/php_5.3.10/modules/
sudo a2dismod php5
sudo service apache2 restart

PHP 5.6のコンパイルとインストール

cd ~/Sources/php-5.6.11
sudo ./configure --prefix=/usr/local/php/php_5.6.11 --with-config-file-path=/usr/local/php/php_5.6.11/lib --with-mysql --with-libdir=/lib/x86_64-linux-gnu --with-apxs2=/usr/bin/apxs2 --enable-zip --with-gd --with-curl --with-xmlrpc --enable-calendar --enable-sockets --with-freetype-dir=/usr/lib/x86_64-linux-gnu  --with-jpeg-dir=/usr/lib/x86_64-linux-gnu --with-pdo-mysql  --with-pdo-pgsql --enable-soap
sudo make clean
sudo make
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/lib/apache2/modules/libphp5.*
sudo make install
sudo ls -lhart /usr/lib/apache2/modules/libphp5.*
sudo rm -rf /usr/local/php/php_5.6.11/modules/libphp5.so
sudo mv /usr/lib/apache2/modules/libphp5.so /usr/local/php/php_5.6.11/modules
ls -lhart /usr/local/php/php_5.6.11/modules
sudo a2dismod php5
sudo service apache2 restart

それらを使用しましょう:

$ sudo php.sh
Opciones del menu
1 => PHP 5.3.10
2 => PHP 5.6.11
Ingrese su eleccion: 1

 * Restarting web server apache2                                                                                                                                                                                                                                        apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

2

問題点:

  1. 単一のApacheインスタンスは、2つの異なるバージョンのPHPを同時に実行できません(少なくとも私の知る限り)。

  2. パッケージから2つの異なるPHPバージョンをインストールすることはできません。これらは競合するためです(同じディレクトリを上書きしてみてください)。

解決:

  • for b)ソースから「他の」PHPバージョンを手動でコンパイルします(または、必要に応じて、適切なパッケージのソースを取得して変更し、競合を回避し、インストールパスを変更します)

  • a)異なるモジュールパスと個別の起動スクリプトを使用して、Apacheの個別の構成セットを作成します。そしてもちろん、別のポートで実行します。


これらの複数の並列phpインスタンスをコンパイルするためのプリパッケージスクリプトはありませんか?手動でそれを行い、パスをパッチするだけですか?つまり、すべてのホスティング会社がこれらの並列バージョンを実行するカスタムスクリプトを開発し、決して努力を共有しないことを意味します。
レンザイ

4
単一のApacheインスタンス一度に2つのPHPバージョンを実行できます。
ナネ

1

複数作成する代わりVirtualHostに、.htaccessファイルに次のコードを追加するだけで、驚くほどうまくいきました。

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
</FilesMatch>

ノード:php7.2-fpmコードを使用する前にインストール済みでした。


0

同時に実行する場合は、2つの異なるポートが必要です。たぶん、Apacheを開始する前に1つまたは別のバージョンを正しい位置に移動する単純なスクリプトを使用して、Apacheの構成(httpd.conf)を変更するだけでよい場合があります。


1
PHP 5.3.5が既にインストールされています。PHP 5.2.17をインストールするにはどうすればよいですか?これら2つのバージョン間で切り替えるためにどこで何を変更する必要があるか教えてください。httpd.confファイルは、私のインストールでは空です。
デビプラサド

0

また、各Webサイトを異なるユーザーで実行することもできます。より安全に。

私はこのアプローチを一度使用しました。

http://blog.servergrove.com/2011/08/22/how-to-setup-multiple-php-versions-on-apache/

php-fpmを使用した方が良いと思いますが、複数のphpバージョンを設定するのは少し複雑です。

複数のphp-fpmsを実行し、相互に使用するようにApacheを設定する必要があります。


3
Ask Ubuntuへようこそ!これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
ユーザー98085

あなたが言ったように、私には十分な時間がありませんでした。方法を見せたいだけだったと思う。書式設定の使い方を学ぶ必要があります。とにかくありがとう!
エンリケフェルナンデス

0

ボックスにインストールされているPHPバージョンを簡単に切り替えることができるbashスクリプトを作成しました。古いプログラムと新しいプログラムを使用している顧客とのいくつかのWebプロジェクトがあるため、複数の仮想ホストを実行しています。これらのプロジェクトのいくつかは、古いバージョンのphpを必要とし、他のプロジェクトはphp7.0を必要とします。

私のコメントを読んで、これを使用する前に何が起こっているかを理解してください。

#!/bin/bash
# This file is for switching php versions.  
# To run this file you must use bash, not sh
# 
# OS: Ubuntu 14.04 but should work on any linux
# Example: bash phpswitch.sh 7.0
# Written by Daniel Pflieger
# growlingflea at g mail dot com

NEWVERSION=$1  #this is the git directory target

#get the active php enabled mod by getting the array of files and store
#it to a variable
VAR=$(ls /etc/apache2/mods-enabled/php*)

#parse the returned variables and get the version of php that is active.
IFS=' ' read -r -a array <<< "$VAR"
array[0]=${array[0]#*php}
array[0]=${array[0]%.conf}


#confirm that the newversion veriable isn't empty.. if it is tell user 
#current version and exit
if [ "$NEWVERSION" = "" ]; then
echo current version is ${array[0]}.  To change version please use argument
exit 1
fi 

OLDVERSION=${array[0]}
#confirm to the user this is what they want to do
echo "Update php"  ${OLDVERSION} to ${NEWVERSION}


#give the user the opportunity to use CTRL-C to exit ot just hit return
read x

#call a2dismod function: this deactivate the current php version
sudo a2dismod php${OLDVERSION}

#call the a2enmod version.  This enables the new mode
sudo a2enmod php${NEWVERSION} 

echo "Restart service??"
read x

#restart apache
sudo service apache2 restart

0

複数のプロジェクトを処理していたときに同じ問題が発生しました。私はこの記事を参照しまし たが、必要に応じてバージョンを切り替える必要があるたびに、CLIとWebに別々に柔軟性を与えます。

php5.6からphp7.0への移行

Apacheの場合、コマンドは次のように使用できます。

sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart

CLIの場合、コマンドは次のように使用できます。

sudo update-alternatives --set php /usr/bin/php7.0

php7.0からphp5.6への移行

Apacheの場合、コマンドは次のように使用できます。

sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart

CLIの場合、コマンドは次のように使用できます。

sudo update-alternatives --set php /usr/bin/php5.6

このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- レビューから
-waltinator

レビューをありがとう@waltinator、必ずこのの世話をする
Shivdhwajパンディ

0

これは、PHP-の新しいバージョンを無効にして有効にすることで実行できます。

  • 古いバージョンに切り替える
    -a2dismod php7.0
    service apache2 restart
  • 新しいバージョンに
    切り替えるa2enmod php7.0
    サービスapache2 restart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.