두 가지 버전의 PHP를 설치하고 쉽게 전환하는 방법은 무엇입니까?


76

우분투 컴퓨터에 PHP 5.2.17과 PHP 5.3.5를 모두 설치하고 필요에 따라 전환하고 싶습니다. 어떻게하면 되나요?


우분투에는 / etc / apache2에 apache.conf가 있습니다. 나도 이것에 대해 생각했을 것입니다. 앞으로 웹 개발자에게 매우 유용한 패키지를 만들 것입니다.

suPHP로이 작업을 수행 할 수 있습니다. 세부 정보는 확실하지 않습니다
Marco Ceppi

1
python virtualenv와 같이 PHP를 깨끗하게 분리하여 배포하는 것이 있습니까?
lenzai 2019

헤드리스 방식으로 사용하는 가상화 소프트웨어를 사용하여 가상 Ubuntu 서버 설정을 고려 했습니까? 당신이하고 싶은 일이 그러한 설정으로 제대로 제공되지 않는지 놀랐습니다.
Simon Hoare

1
"쉬운 전환"의 의미를 정의하십시오. 나는 이것을 일에 사용했다. 웹 서버는 다른 PHP .php.php5파일 을 사용 하고 있었다 . 또한 다른 포트 (예 : http://localhost:80http://localhost:8080) 또는 다른 도메인 (예 : http://localphp52http://localphp53)에 다른 PHP 버전을 사용하도록 WWW 서버를 구성하여 나머지 폴더 구조를 그대로 유지하여 현재 환경을 변경하여 두 웹 환경에서 하나의 웹 응용 프로그램을 쉽게 비교할 수 있습니다. URL.
cprn

답변:


61

이를 위해 PHP 버전 관리자를 사용할 수 있습니다. 다음과 같은 다양한 버전 관리자가 제공됩니다.

내가 가장 좋아하는 것은 phpbrew입니다. 도움이 되었기를 바랍니다.


2
고마워요, 지시 사항을 포함시켜 주시겠습니까 (onnu vishadheekarikkamo?)
Tachyons

17
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Nanne

2
사이트에서 실제로 좋은 문서가있는 링크를 확인하십시오. 웹 사이트에서 복사하여 붙여 넣기 하시겠습니까?
aneeshep

7
아이러니하게도, 링크를 게시하지 않는 이유 중 하나는 링크 로트 (linkrot)입니다.
MirroredFate

@aneeshep, 그들의 문서를 복사-붙여 넣기하지 말고, "php version manager"가 무엇인지 그리고 그 특정 문제를 위해 그것을 어떻게 사용 / 구성하는지에 관한 관련 발췌와 몇 줄을 환영합니다.
Matthieu

20

당신은 할 수 있습니다 한 번에 2 개의 다른 PHP 버전을 실행하지만, 그것은 단지 APT-점점 그들을만큼 쉬운 일이 아니다. 별도로 설치된 하나의 버전을 실행하고 아파치 구성의 설정에 따라 제공해야합니다.

예를 들어 fastcgi를 사용하여이 작업을 수행 할 수 있습니다. 기본적으로 찾고있는 것은 이 페이지에 표시되는 구성 입니다. 필요한 상황 / 포트 / 도메인에 따라 구성에 다른 핸들러를 추가합니다. 트릭은 두 버전을 모두 설치 한 후 다음 단계입니다.

=== 해당 페이지에서 ==

  1. 마지막 단계는 가상 호스트를 만드는 것이 었습니다. 결국 / etc / apache2 / sites-enabled에 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>

전체 설치 는 링크 된 질문을 참조하십시오 . 헤더의 두 링크를 보는 것을 잊지 마십시오. 멋진 자습서처럼 보이지만 압축률은 낮습니다. 이것저것

(연결 된 질문은 대답이없는 큰 질문이라는 사실에 말하지 마십시오.이 방법은 제대로 작동해야하지만 사용자 는 짧은 태그 를 사용하지 <?php않고 사용 <?하는 것을 잊어 버렸습니다. 설명을 참조하십시오)


13

PHP 5.6 및 7.0을 설치했지만 모든 팁 외에도 5.6을 계속 실행 했으므로이 명령으로 하루를 절약 할 수 있습니다 (제 경우 i chosse 옵션 1을 선택하고 아파치를 다시 시작하십시오).

sudo update-alternatives --config php

둘 다 다른 값을 가질 수 있으므로 사용을 기억 phpinfo()하고 php -v교차 점검 하는 것이 유용 합니다.
Adi Prasetyo

6

이것은 나를 위해 작동합니다 : https://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

"Growling Flea"의 스크립트와 동일하지만 새 버전을 사용합니다.

PPA 추가

PHP 5.6 및 PHP 7.0 패키지는 Canonical의 공식 Ubuntu 리포지토리에서 제공하지 않는 타사 PPA에서 제공됩니다. 여기에서 권장하는 PPA는 Ondřej Surý의 데비안 용 PHP를 패키징 한 Ondřej Surý (우분투에서 사용됨)이므로 공식 저장소는 아니지만 무작위는 아닙니다! PPA 자체가 여기에 있습니다

설정에 PPA를 추가하려면 다음을 수행하십시오.

sudo add-apt-repository ppa:ondrej/php  

그런 다음이 새로운 PPA에서 제공되는 내용에 대한 정보도 얻고 싶을 것입니다.

sudo apt-get update   

새로운 PHP 버전 설치

이미 php5 패키지 중 일부가 설치되어 있지만 아무것도 제거하지 않았습니다. 새 버전을 설치하라는 메시지가 표시되면 원하는 작업을 수행하도록하십시오.

sudo apt-get install php5.6 php7.0

이로 인해 많은 갈등과 불만이 제기되었습니다. 첫 번째 제안 된 해결책은 모든 php5 패키지를 제거하여 PHP 5.6을 설치할 수 있도록하는 것입니다. 그래서 첫 제안을 받아 들였습니다.

아파치를 사용 하므로이 설정으로 php5.6 및 php7.0 모듈을 모두 사용할 수 있으며 php5.6 모듈이 실제로로드되었습니다.

PHP 자체뿐만 아니라 PHP에서 기대할 수있는 모든 확장 기능 및 기타 도구가 두 버전의 PHP에 모두 포함되어 있으므로 필요한 모듈에 쉽게 추가 할 수 있습니다. 나는 이것이 얼마나 훌륭하게 이루어 졌는지 매우 감동했습니다.

버전 구성 및 전환

이제 시스템에 완전히 분리 된 두 개의 PHP 버전이 설치되었으므로 모든 부분이 어디로 갔는지 살펴 보겠습니다!

설정 파일은 모두 있습니다 /etc/php/5.6/etc/php/7.0 각각 - 당신이 확장로드되는 구성의 INI 설정을 설정하고, 분리의 각 버전에 다른 모든 것을 할 수있는 내부 여기에있다.

나는 아파치 사용자이며 언급 한 것처럼 두 모듈을 모두 사용할 수 있습니다. 따라서 하나에서 다른 것으로 전환하려면 다음을 수행해야합니다.

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

nginx를 사용자의 변경 사항이 디지털 오션이에 대한 좋은 문서가, 거의 쉽게 그래서 자신의 가이드를 확인 (그들은 큰 문서를 수행하십시오!) : https://www.digitalocean.com/community/tutorials/how-to- 다른 버전의 PHP를 사용하도록 nginx를 재구성하는 섹션이 포함되어 있으므로 PHP-7로 업그레이드 (ubuntu-14-04) 로 업그레이드하십시오.

커맨드 라인에서 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로 끝나는 자체 파일의 일부 모듈이 이미 있습니다. 템플릿으로 사용하기 위해 하나를 복사하거나 직접 작성하고 확장에 대한 모든 관련 구성을 최소한으로 포함시킬 수 있습니다 extension=[extensionName].so.

새 확장 프로그램을 사용할 수있게되면 다음을 수행하여 활성화하고 확인하십시오.

sudo phpenmod extension  
php -m  

이렇게하면 현재 버전의 PHP가이 모듈을로드 할 수있는 올바른 위치에 심볼릭 링크가 생성되며이 모듈이로드 한 모듈 목록에 해당 심볼이 표시 php -m됩니다. 전문가 팁 : 출력에 표시되지 않으면 출력 맨 위로 스크롤하여 유용한 오류 메시지가 있는지 확인하십시오.


3

이 게시물 에서 나는 명령을 순서대로 넣고 내가 봉사 한 순서대로 설명합니다 (우분투 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. 단일 아파치 인스턴스는 (적어도 내가 아는 한) 두 가지 다른 PHP 버전을 동시에 실행할 수 없습니다.

  2. 충돌하는 두 개의 다른 PHP 버전을 패키지에서 설치할 수 없습니다 (같은 디렉토리를 덮어 쓰십시오).

해결책:

  • b) 소스에서 "다른"PHP 버전을 수동으로 컴파일 (또는 원하는 경우 적절한 패키지의 소스를 가져 와서 충돌을 피하고 설치 경로를 수정하도록 수정)

  • a) 다른 모듈 경로와 별도의 시작 스크립트를 사용하여 아파치에 대해 별도의 구성 세트를 작성하십시오. 물론 별도의 포트에서 실행하십시오.


이 다중 병렬 PHP 인스턴스를 컴파일하는 사전 패키지 스크립트가 없습니까? 그냥 수동으로하고 경로를 패치합니까? 따라서 이것은 모든 호스팅 회사가 이러한 병렬 버전을 실행하고 그들의 노력을 공유하지 않는 사용자 지정 스크립트를 개발한다는 것을 의미합니다.
lenzai

4
단일 아파치 인스턴스 한 번에 2 개의 PHP 버전을 실행할 수 있습니다 .
Nanne 2013

1

여러 개를 만드는 대신 파일에 VirtualHost아래 코드를 추가하면 .htaccess놀랍게도 작동했습니다.

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

노드 : php7.2-fpm코드를 사용하기 전에 이미 설치했습니다 .


0

동시에 실행하려면 두 개의 다른 포트가 필요합니다. 어쩌면 아파치를 시작하기 전에 하나 또는 다른 버전을 올바른 위치로 이동시키는 간단한 스크립트로 아파치 설정 (httpd.conf)을 변경할 수 있습니다.


1
이미 PHP 5.3.5가 설치되어 있습니다. PHP 5.2.17을 어떻게 설치합니까? 이 두 버전에서 전환하기 위해 어디에서 무엇을 변경해야하는지 말씀해 주시겠습니까? 설치시 httpd.conf 파일이 비어 있습니다.
Debiprasad

0

다른 사용자들과 함께 각 웹 사이트를 실행할 수도 있습니다. 더 안전합니다.

나는이 aproach를 한 번 사용했습니다.

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

이제 PHP-fpm을 사용하는 것이 더 낫다고 생각하지만 여러 PHP 버전을 구성하는 것이 더 복잡합니다.

다중 php-fpms를 실행하고 서로를 사용하도록 아파치를 설정해야합니다.


3
Ask Ubuntu에 오신 것을 환영합니다! 이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
user98085

당신이 말한대로 할 시간이 없었습니다. 나는 길을 보여주고 싶었다. 포맷팅을 사용하는 방법을 배워야합니다. 어쨌든 고마워!
Henrique Fernandes

0

상자에 설치된 PHP 버전 간을 쉽게 전환 할 수있는 bash 스크립트를 작성했습니다. 이전 및 새로운 프로그램을 보유한 고객과 여러 웹 프로젝트를 수행하고 있기 때문에 여러 가상 호스트를 실행합니다. 이러한 프로젝트 중 일부는 이전 버전의 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 및 웹을위한 유연성을 제공하는 경우 버전을 전환해야 할 때마다 같았다.

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 Pandey

0

새 버전의 PHP를 비활성화하고 활성화하여 수행 할 수 있습니다.

  • 이전 버전으로 전환
    -a2dismod php7.0
    service apache2 restart
  • 최신 버전으로 전환
    a2enmod php7.0
    서비스 apache2 restart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.