コマンドラインubuntu16.04でphpバージョンを切り替えます


107

Ubuntu16.04にphp5.6とphp7.1をインストールしました

私はApacheをWebサーバーとして使用しているので、

a2enmod php5.6 #to enable php5
a2enmod php7.1 #to enable php7

Apacheモジュールでphp7.1を無効にし、php 5.6を有効にすると、Apacheは変更を認識し、期待どおりにphp5.6インタープリターを使用します。

しかし、コマンドラインから内部php Webサーバーを実行すると:

php -S localhost:8888

phpはphp7を使用してリクエストを処理します。コマンドラインでphp5.6とphp7.1を切り替えるにはどうすればよいですか?


回答:


243

インタラクティブスイッチングモード

sudo update-alternatives --config php

手動切り替え

PHP5.6から=> PHP 7.1

システムにはデフォルトのPHP5.6が設定されており、PHP7.1に切り替える必要があります。

Apache:

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1
$ sudo service apache2 restart

コマンドライン:

$ sudo update-alternatives --set php /usr/bin/php7.1

PHP7.1から=> PHP 5.6

システムにはデフォルトのPHP7.1が設定されており、PHP5.6に切り替える必要があります。

Apache:

$ sudo a2dismod php7.1
$ sudo a2enmod php5.6
$ sudo service apache2 restart

コマンドライン:

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

ソース


1
sudo update-alternatives --set php / usr / bin / php5.6このコマンドは私の時間を節約しました。ありがとう@ StevieG–
Ask Bytes

あなたは最高の仲間です...どうもありがとう。
フェンディセプティアワン2018年

apache2の再起動時にセグメンテーション違反が発生しました。その後、一度に複数のPHPバージョンを有効にしていることがわかりました。5.6を有効にする前に、7.1と7.2の両方を無効にする必要がありました。
donquixote

実際、私はこのソリューションを使用php -vして7.2から7.1に変更しました。それは素晴らしくてシンプルです。
SaidbakR

すばらしいアドバイスもここにあります-askubuntu.com/questions/761713/…。ちなみに、特定のバージョンのphpで特定のエラーが発生した場合(たとえば、create_functionphp 7.2以降はサポートされなくなった場合)、いくつかのphpモジュール(5.6、7.0、7.1、7.2など)をインストールして、それらを調整できます。。)
VadimAnisimov19年

121

コマンドラインにこれ​​を入力します。16.04、18.04、20.04の間のすべてのubuntuで機能するはずです。

$ sudo update-alternatives --config php

そしてこれはあなたが得るものです

There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php7.2   72        auto mode
  1            /usr/bin/php5.6   56        manual mode
  2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode
Press <enter> to keep the current choice[*], or type selection number:

適切なバージョンを選択してください


2
この1は答えなければなりません
itsazzad

なぜphp7.2を2回?
Sand

@SandOfVegaこれはコマンドの出力であり、デフォルトの場合は2回表示される可能性がありますが、出力が異なる場合があります。
GiorgosK

:Ubuntuの20.04は私に「phpのためノー代替エラー」を与える
バーズム

@burzumはUbuntu20.04で正常に動作します。
PothiKalimuthu20年

12

私は実際にはa2enmodphp5または7に使用することをお勧めしません。私はを使用しますupdate-alternativessudo update-alternatives --config php使用するPHPのシステム全体のバージョンを設定するために行うことができます。これにより、コマンドラインとApacheのバージョンが同じように機能します。詳細についてupdate-alternativesは、manページを参照してください


1
それは私のために働いていません。選択してみても、PHPINFOは常に同じバージョンを表示しています。
brunoramonalmeida 2018年

12

これを試してみるべきだと思います

php5.6からphp7.1へ

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

sudo update-alternatives --set php /usr/bin/php7.1
sudo update-alternatives --set phar /usr/bin/phar7.1
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.1

php7.1からphp5.6へ

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

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

1
このコードが機能する理由とその意味を理解するために、回答について十分な説明を行ってください。同じ問題を抱えているユーザーにとって回答が役立つようになります。良い答えを書く方法を知るためにリンクを見てください。
Jino Shaji 2017

12

利用可能なすべてのバージョンを一覧表示し、それらから選択するには:

sudo update-alternatives --config php

または手動で行う

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable

9

バージョンから切り替えるスクリプトを作成できます。sudo nano switch_php 次に、次のように入力します。

#!/bin/sh
#!/bin/bash
echo "Switching to PHP$1..."
case $1 in
    "7")
        sudo a2dismod php5.6
        sudo a2enmod php7.0
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php;;
    "5.6")
        sudo a2dismod php7.0
        sudo a2enmod php5.6
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php;;
esac
echo "Current version: $( php -v | head -n 1 | cut -c-7 )"

終了して保存すると、実行可能になります。 sudo chmod +x switch_php

スクリプトを実行するには./switch_php [VERSION_NUMBER]、パラメータが7または5.6の場合に入力するだけです。

これで、PHP7からPHP5.6に簡単に切り替えることができます。


有望に見えますが、「ln -sfn ...」を使用すると、lnコマンドで「n」フラグは何をしますか。ドキュメントのどこにもそのフラグ( "n")を見つけることができませんでした。
FakharAnwar20年

8

以下のコマンドラインを使用して、2つのPHPバージョンを切り替えることができます。

例えば

私は切り替えたいPHP Versionから7.17.2私たちがコマンドの下に使用することができます

sudo a2dismod php7.1 &&  sudo update-alternatives --set php /usr/bin/php7.2 && sudo a2enmod php7.2 && sudo service apache2 restart

a2dismod現在のphpバージョンを無効にするためにa2enmod使用され、バージョンを有効にするために使用されます


8

システムにPHP5.6のような古いPHPバージョンがあり、PHP 7.2もインストールして、マシンに複数のPHPがインストールされている可能性があります。古いPHP5.6が最新バージョンであったときに開発されたアプリケーションがいくつかありますが、それらはまだ稼働しており、それらのアプリケーションで作業しています。Laravelで同時に作業している可能性がありますが、Laravelを開始するにはPHP7以降が必要です。写真を取得しますか?

その場合、要件に合わせてPHPバージョンを切り替えることができます。

PHP5.6からの切り替え=> PHP 7.2

Apache:-

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

コマンドライン:-

sudo update-alternatives --set php /usr/bin/php7.2
sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2

逆に、PHP7.2から切り替える=> PHP 5.6

Apache:-

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

コマンドライン:-

sudo update-alternatives --set php /usr/bin/php5.6
sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6
sudo update-alternatives --set phpize /usr/bin/phpize5.6
sudo update-alternatives --set php-config /usr/bin/php-config5.6

3

ターミナルで指定されたコマンドを入力します。

選択したPHPバージョンを無効にするには...

    • sudo a2dismod php5
    • sudo service apache2 restart
  1. 他のPHPバージョンを有効にするために...

    • sudo a2enmod php5.6
    • sudo service apache2 restart

PHPバージョンをアップグレードします。バージョンをダウングレードしたい場合は同じことを逆にします。PHP_INFO()で確認できます。


3

以下を使用して、PHP5.6からPHP7.2に切り替えます。

sudo a2dismod php5.6 && sudo a2enmod php7.2 && sudo service apache2 restart

以下を使用して、PHP7.2からPHP5.6に切り替えます。

sudo a2dismod php7.2 && sudo a2enmod php5.6 && sudo service apache2 restart

3

Ubuntu 16.04LTSで使用するために特別に設計されたこれらのオープンソースのPHPスイッチスクリプトを使用できます。

https://github.com/rapidwebltd/php-switch-scripts

setup.shPHP 5.6、7.0、7.1、および7.2に必要なすべての依存関係をインストールするスクリプトがあります。これが完了したら、次のスイッチスクリプトのいずれかを実行して、PHPCLIおよびApache2モジュールのバージョンを変更できます。

./switch-to-php-5.6.sh
./switch-to-php-7.0.sh
./switch-to-php-7.1.sh
./switch-to-php-7.2.sh

1

PHP5.6から=> PHP 7.1

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1

古いLinuxバージョンの場合

 $ sudo service apache2 restart

最新バージョンの場合

$ systemctl restart apache2

1

手順に従ってください:

i.e : your current version is : current_version = 7.3 , and you want to change it to : new_version = 7.2

1) sudo a2dismod php(current_version) 
2) sudo a2enmod php(new_version)
3) sudo update-alternatives --config php (here you need to select php version number) 
4) restart apache through : 
  sudo /etc/init.d/apache2 restart OR
  sudo service apache2 restart

1

Ubuntuで異なるPHPバージョンを切り替えるためのbashスクリプトを作成しました。

それが誰かを助けることを願っています。

スクリプトは次のとおりです:(/ usr / local / bin / sphp.shに保存し、コマンドで+ xフラグを追加することを忘れないでください:sudo chmod + x /usr/local/bin/sphp.sh)

#!/bin/bash

# Usage
if [ $# -ne 1 ]; then
  echo "Usage: sphp [phpversion]"
  echo "Example: sphp 7.2"
  exit 1
fi

currentversion="`php -r \"error_reporting(0); echo str_replace('.', '', substr(phpversion(), 0, 3));\"`"
newversion="$1"

majorOld=${currentversion:0:1}
minorOld=${currentversion:1:1}
majorNew=${newversion:0:1}
minorNew=${newversion:2:1}

if [ $? -eq 0 ]; then
  if [ "${newversion}" == "${currentversion}" ]; then
    echo "PHP version [${newversion}] is already being used"
    exit 1
  fi

  echo "PHP version [$newversion] found"
  echo "Switching from [php${currentversion}] to [php${newversion}] ... "

  printf "a2dismod php$majorOld.$minorOld ... "
  sudo a2dismod "php${majorOld}.${minorOld}"
  printf "[OK] and "

  printf "a2enmod php${newversion} ... "
  sudo a2enmod "php${majorNew}.${minorNew}"
  printf "[OK]\n"

  printf "update-alternatives ... "
  sudo update-alternatives --set php "/usr/bin/php${majorNew}.${minorNew}"
  printf "[OK]\n"

  sudo service apache2 restart
  printf "[OK] apache2 restarted\n"
else
  echo "PHP version $majorNew.$minorNew was not found."
  echo "Try \`sudo apt install php@${newversion}\` first."
  exit 1
fi

echo "DONE!"



0

Ubuntu 18.04にlaravelをインストールするときは、デフォルトのPHP 7.3.0RC3インストールを選択しますが、laravelとsymfonyは、インストールされていても、php-xmlとphp-zipのミスについて正しくインストールされません。上記の手順を使用して、php7.1に切り替える必要があります。

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

今、laravelの新しいブログを実行して、正しく進行します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.