명령 줄 우분투 16.04에서 PHP 버전 전환


108

Ubuntu 16.04에 PHP 5.6 및 PHP 7.1을 설치했습니다.

Apache를 내 웹 서버로 사용하면 할 수 있습니다.

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

Apache 모듈에서 php7.1을 비활성화하고 php 5.6을 활성화하면 Apache가 변경 사항을 인식하고 예상대로 php 5.6 인터프리터를 사용합니다.

하지만 명령 줄에서 내부 PHP 웹 서버를 실행할 때 :

php -S localhost:8888

php는 php 7을 사용하여 요청을 처리합니다. 그러면 명령 줄에서 php 5.6과 php 7.1 사이를 어떻게 전환합니까?


답변:


248

대화 형 전환 모드

sudo update-alternatives --config php

수동 전환

PHP 5.6부터 => PHP 7.1

기본 PHP 5.6이 시스템에 설정되어 있으며 PHP 7.1로 전환해야합니다.

Apache :

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

명령 줄 :

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

PHP 7.1부터 => PHP 5.6

기본 PHP 7.1이 시스템에 설정되어 있으며 PHP 5.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

넌 최고야 ... 정말 고마워.
펜디 Septiawan

apache2를 다시 시작할 때 세분화 오류가 발생했습니다. 그런 다음 한 번에 둘 이상의 PHP 버전이 활성화되어 있음을 발견했습니다. 5.6을 활성화하기 전에 7.1과 7.2를 모두 비활성화해야했습니다.
donquixote jul.

실제로이 솔루션을 사용 php -v하여 7.2에서 7.1 로 변경 했습니다! 위대하고 간단합니다.
SaidbakR

여기에도 훌륭한 조언이 있습니다 -askubuntu.com/questions/761713/… . 그건 그렇고, 예를 들어 5.6, 7.0, 7.1, 7.2와 같은 여러 PHP 모듈을 설치 한 다음 주어진 PHP 버전에 대해 특정 오류가 발생하면 저글링 할 수 있습니다 (예를 들어 create_functionphp 7.2부터는 더 이상 지원되지 않습니다) .)
Vadim Anisimov

122

명령 줄에 이것을 입력하면 16.04, 18.04 및 20.04 사이의 모든 우분투에서 작동합니다.

$ 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
이 사람은 대답해야한다
itsazzad

왜 php7.2를 두 번?
베가의 모래

@SandOfVega 이것은 명령의 출력이며 내가 추측하는 기본값 인 경우 2 번 표시 할 수 있지만 출력이 다를 수 있습니다.
GiorgosK

: 20.04 나에게 "PHP에 대한 어떤 대안 오류"제공 우분투
버줌

@burzum은 Ubuntu 20.04에서 잘 작동합니다.
Pothi Kalimuthu

13

이거 먹어 봐야 할 것 같아

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

12

나는 실제로 a2enmodphp 5 또는 7에 사용 하는 것을 권장하지 않습니다 update-alternatives. sudo update-alternatives --config php사용하려는 PHP의 시스템 전체 버전을 설정할 수 있습니다 . 이렇게하면 명령 줄과 아파치 버전이 동일하게 작동합니다. 자세한 내용 update-alternativesman 페이지 에서 읽을 수 있습니다 .


1
나를 위해 작동하지 않습니다. PHPINFO는 선택을 시도한 후에도 항상 동일한 버전을 표시합니다.
brunoramonalmeida

12

사용 가능한 모든 버전을 나열하고 선택하려면 다음을 수행하십시오.

sudo update-alternatives --config php

또는 수동으로 수행

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

10

버전에서 전환 할 스크립트를 생성 한 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에서 PHP 5.6으로 쉽게 전환 할 수 있습니다!


유망 해 보이지만 "ln -sfn ..."을 사용할 때 ln 명령에서 'n'플래그가 수행하는 작업은 무엇입니까? 문서의 어느 곳에서도 해당 플래그 ( "n")를 찾을 수 없습니다.
Fakhar Anwar

@FakharAnwar man ln:-n, --no-dereference : treat LINK_NAME as a normal file if it is a symbolic link to a directory
Flame

8

아래 명령 줄을 사용하여 두 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

시스템에 PHP 5.6과 같은 이전 PHP 버전이 있고 시스템에 여러 PHP가 있도록 PHP 7.2도 설치했을 수 있습니다. 이전 PHP 5.6이 최신 버전 일 때 개발 된 일부 애플리케이션이 있습니다. 여전히 라이브 상태이며 해당 애플리케이션에서 작업 중입니다. Laravel에서 동시에 작업 할 수도 있지만 Laravel을 시작하려면 PHP 7 이상이 필요합니다. 사진을 얻고 있습니까?

이 경우 요구 사항에 맞게 PHP 버전간에 전환 할 수 있습니다.

PHP 5.6에서 전환 => PHP 7.2

아파치 :-

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

그 반대의 경우도 마찬가지입니다. PHP 7.2에서 전환 => PHP 5.6

아파치 :-

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 서비스 apache2 다시 시작
  1. 다른 PHP 버전을 활성화하려면 ....

    • sudo a2enmod php5.6
    • sudo 서비스 apache2 다시 시작

Php 버전을 업그레이드합니다. 버전 다운 그레이드를 원하면 반대로도 마찬가지입니다. PHP_INFO ();


3

다음을 사용하여 PHP 5.6에서 PHP 7.2로 전환하십시오.

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

다음을 사용하여 PHP 7.2에서 PHP 5.6으로 전환합니다.

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

3

Ubuntu 16.04 LTS에서 사용하도록 특별히 설계된 이러한 오픈 소스 PHP 스위치 스크립트를 사용할 수 있습니다.

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

setup.shPHP 5.6, 7.0, 7.1 및 7.2에 필요한 모든 종속성을 설치 하는 스크립트 가 있습니다 . 이 작업이 완료되면 다음 스위치 스크립트 중 하나를 실행하여 PHP CLI 및 Apache 2 모듈 버전을 변경할 수 있습니다.

./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

PHP 5.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 스크립트를 만들었습니다.

누군가에게 도움이되기를 바랍니다.

스크립트는 다음과 같습니다.

#!/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 누락에 대해 불평하면서 제대로 설치되지 않습니다. 위의 지침을 사용하여 PHP 7.1로 전환해야합니다.

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

이제 laravel 새 블로그를 실행하면 올바르게 진행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.