[php] XAMPP에서 두 개의 PHP 버전을 사용하는 방법이 있습니까?

새 제품에는 PHP 7이 필요하기 때문에 PHP 7.0에서 XAMPP를 실행하고 있습니다.

그러나와 같은 기능을 사용하는 오래된 프로젝트가 있습니다 mysql_connect. PHP 7.0에서 제거되었습니다.

그렇다면 XAMPP에서 PHP 버전을 쉽게 변경하는 방법이 있습니까?

참고 : 개발자 (직원)가 될 수없는 결정으로 인해 이전 프로젝트를 새 버전과 호환되도록 업그레이드하지 마십시오.



답변

단일 xampp 설치로 여러 PHP 버전 을 동시에 사용할 수 있는데 왜 PHP 버전간에 전환해야 합니까? 단일 xampp 설치로 두 가지 옵션이 있습니다.

  1. 이전 프로젝트의 디렉토리에 대해서만 이전 PHP 버전을 실행하십시오.
    대부분의 경우에 해당되며 이전 PHP 버전으로 실행하려는 하나 또는 두 개의 이전 프로젝트가있을 수 있습니다. 해당 프로젝트 디렉토리에 대해서만 이전 PHP 버전을 실행하도록 xampp를 구성하십시오.

  2. 별도의 xampp 포트에서 이전 PHP 버전을 실행하십시오. 때때로 새로운 PHP 버전과 이전 PHP 버전에서 동일한 프로젝트를 실행해야 할 때 때때로 이전 프로젝트를 최신 PHP 버전으로 업그레이드 할 수 있습니다. 그런 다음 다른 포트 (예 : 8056)에 이전 PHP 버전을 설정할 수 있으므로 http://localhost/any_project/xampp 로 이동하면 PHP 7이 http://localhost:8056/any_project/실행 되고 xampp 로 이동하면 PHP 5.6이 실행됩니다.

  3. 가상 호스트에서 이전 PHP 버전 실행 : localhost에서 PHP 7을 사용하면서 localhost56과 같은 가상 호스트를 생성하여 PHP 5.6을 실행할 수 있습니다.

설정할 수 있습니다.

1 단계 : PHP 다운로드

따라서 xampp에서 PHP 7을 실행하고 있으며 PHP 5.6과 같이 이전 PHP 버전을 추가하려고합니다. php.net 에서 PHP zip 아카이브의 nts (Non Thread Safe) 버전을 다운로드하고 ( 이전 버전의 아카이브 참조 ) 아래의 파일을 추출하십시오 c:\xampp\php56. 스레드 안전 버전에는 php-cgi.exe가 포함되어 있지 않습니다.

2 단계 : 구성php.ini

c:\xampp\php56\php.ini메모장에서 파일을 엽니 다 . 파일이 없으면 메모장에서 복사 php.ini-development하여 php.ini엽니 다. 그런 다음 다음 줄의 주석을 해제하십시오.

extension_dir = "ext"

3 단계 : 아파치 구성

열기 XAMPP 컨트롤 패널은 아파치에 대한 버튼을 config (설정)를 클릭, 클릭합니다 Apache (httpd-xampp.conf). 텍스트 파일이 열리고 파일의 맨 아래에 다음 설정이 적용됩니다.

ScriptAlias /php56 "C:/xampp/php56"
Action application/x-httpd-php56-cgi /php56/php-cgi.exe
<Directory "C:/xampp/php56">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
        Require all granted
    </Files>
</Directory>

참고 : 원하는 경우 1-3 단계에 따라 xampp 설치에 더 많은 버전의 PHP를 추가 할 수 있습니다.

4 단계 (옵션 1) : [특정 PHP 버전을 실행하기위한 디렉토리 추가]

이제 PHP 5.6에서 실행될 디렉토리를 설정할 수 있습니다. 구성 파일의 맨 아래에 다음을 추가하여 디렉토리를 설정하십시오.

<Directory "C:\xampp\htdocs\my_old_project1">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</Directory>

<Directory "C:\xampp\htdocs\my_old_project2">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</Directory>

4 단계 (옵션 2) : [별도의 포트에서 이전 PHP 버전 실행]

이제 PHP v5.6을 포트 8056으로 설정하려면 다음 코드를 구성 파일의 맨 아래에 추가하십시오.

Listen 8056
<VirtualHost *:8056>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>

4 단계 (옵션 3) : [가상 호스트에서 이전 PHP 버전 실행]

http : // localhost56 에서 PHP v5.6을 사용하기 위해 디렉토리 (htdocs56)에 가상 호스트 (localhost56)를 작성하려면 원하는 위치에 htdocs56 디렉토리를 작성하고 localhost56을 hosts 파일에 추가 한 후 ( 방법 참조 ) 다음 코드를 추가하십시오. httpd-xampp.conf 파일의 맨 아래에.

<VirtualHost localhost56:80>
    DocumentRoot "C:\xampp\htdocs56"
    ServerName localhost56
    <Directory "C:\xampp\htdocs56">
        Require all granted
    </Directory>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>

완료 : Apache 저장 후 다시 시작

구성 파일을 저장 한 후 xampp 제어판에서 아파치를 다시 시작하십시오. 옵션 2로 가면 xampp 제어판에 추가 포트 (8056)가 표시됩니다.

여기에 이미지 설명을 입력하십시오

오류 업데이트 :
‘php-cgi.exe’스크립트에서 잘못된 헤더 : 잘못된 헤더

위의 오류가 발생하면 httpd-xampp.conf다시 열고 다음 # (해시 문자)를 주석으로 처리하십시오.

SetEnv PHPRC "\\path\\to\\xampp\\php"


답변

필요한 모든 버전의 PHP를 다운로드하여 자체 디렉토리에 배치 할 수 있습니다. 예 :

c:\php5\

c:\php7\

웹 서버 (Apache)에 사용할 PHP 버전을 알려 주면 적절한 모듈을로드하여 수행 할 수 있습니다. Apache에서는 파일 httpd.conf을 찾은 다음 적절한 행을 편집하여 이를 수행 할 수 있습니다 .

LoadModule php7_module c:\php7\libphp7.so

올바른 경로를 알아 내야합니다. 이것은 단지 설명을위한 것입니다.

httpd.conf서버를 저장 하고 다시 시작하십시오. 다시 시작하지 않으면 변경 사항이 적용되지 않습니다.

이 작업을 수행 할 수있는 GUI 스위치가 없으므로 .conf파일 을 편집 한 다음 Apache를 다시 시작 해야합니다 . 이 작업을 수행하는 데 몇 초 밖에 걸리지 않으며 버전을 주석 처리 할 수도 있으므로 “전환”에는 몇 번의 키 입력 만 필요합니다.

PHP 5를 사용하십시오 :

LoadModule php5_module c:\php5\libphp5.so
#LoadModule php7_module c:\php7\libphp7.so

PHP 7을 사용하십시오.

#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so

여러 버전의 XAMPP 또는 이중 부팅이 필요하지 않거나 다른 시스템 또는 복잡한 해결 방법을 제안한 다른 “솔루션”을 사용할 필요가 없습니다. OP는 XAMPP를 사용하고 사용할 PHP 버전을 알려고합니다. 이는 가장 빠르고 효율적인 방법이며 XAMPP 설치는 하나만 필요합니다.

2017 년 11 월 1 일 편집 : 일부 사람들은 .soWindows에 파일 이 없다고 말합니다 . 내가 준 대답은 Mac에서 .so파일을 설정하는 방식 (에서 대신 파일을 사용함 .dll)에 맞게 조정되었습니다. 그러나 대답의 원칙은 여전히 ​​정확합니다. 당신은 아파치의 구성 파일을 사용하여 httpd.conf지정하는 PHP 모듈이 ( .so또는 .dll) 시스템에 있습니다. 따라서 Windows의 유일한 차이점은 파일 이름 및 / 또는 경로 위치입니다. 내가 제공 한 답변은 Apache / PHP의 바닐라 설치 (XAMPP가 전혀 없음)에도 정확합니다.


답변

내가하는 것처럼 두 개의 다른 xampps를 다운로드 하여 설치할 수 있습니다 (첫 번째는 php7이고 두 번째는 php5입니다)
여기에 이미지 설명을 입력하십시오

그렇게하고 싶지 않다면, 여기에 표시된 것처럼 wamp를 사용하고 버전을 변경하는 것이 좋습니다 .


답변

Docker를 사용하는 것이 좋습니다. 환경을 다양한 구성 요소로 분할하고 언제든지 원하는 구성을 혼합하고 일치시킬 수 있습니다.

Docker를 사용하면 MySQL로 하나의 컨테이너를, PHP로 다른 컨테이너를 실행할 수 있습니다. 별도의 이미지이므로 두 개의 컨테이너, 하나는 PHP 5, 다른 하나는 PHP 7을 가질 수 있으며 원하는 포트를 시작하면 포트 80을 두 컨테이너에 모두 매핑 할 수 있습니다.

https://hub.docker.com 에는 많은 사전 구성 이미지가있어 번거 로움없이 설치하고 실행할 수 있습니다.

또한 이미지로 portainer 를 추가 하여 docker 이미지 내에서 docker 설정의 다양한 측면을 관리 할 수 ​​있습니다 (시작 시이 컨테이너를 시작하여 명령 줄을 사용하지 않아도되었습니다). 그것은 당신을 위해 모든 것을하지 않으며 때로는 명령 줄에서 처음으로 이미지를 구성하고 시작하는 것이 더 쉽지만 일단 설정하면 웹 인터페이스를 통해 이미지를 시작하고 중지 할 수 있습니다.

두 컨테이너를 동시에 실행하고 별도의 포트를 각각에 매핑 할 수도 있습니다. 따라서 포트 80은 PHP 5와 81에서 PHP 81 (또는 2017 년에 이것을보고 있다면 PHP 7)에 매핑 될 수 있습니다.

Docker ( https://docs.docker.com/engine/installation/ ) 를 설치하는 방법 과 다른 ‘방법’을 입력하는 방법 에 대한 다양한 자습서가 있습니다 . 개발 환경 구성에 대해서는 http://www.masterzendframework.com/docker-development-environment/ 를 시도 하십시오 .


답변

Uniserver를 사용합니다.

이 기능이 내장되어 있습니다.

http://www.uniformserver.com/

그렇게 간단합니다.

Uniform Server는 Windows 용 무료 경량 WAMP 서버 솔루션입니다. 24MB 미만의 모듈 식 디자인에는 최신 버전의 Apache2, Perl5, PHP (PHP53, PHP54, PHP55 또는 PHP56 간 전환), MySQL5 또는 MariaDB5, phpMyAdmin 또는 Adminer4가 포함됩니다. 설치가 필요 없습니다! 레지스트리 먼지가 없습니다! 포장을 풀고 발사하십시오!

심지어 플래시 드라이브를 사용합니다. cron 에뮬레이션, perl, mariaDB, 몇 가지 버전의 MySQL, filezilla 서버 및 기타 몇 가지를 지원합니다.

여기에 이미지 설명을 입력하십시오


답변

XAMPP의 두 가지 버전이있을 수 있습니다.

  • https://www.apachefriends.org/download.html 에서 해당 파일을 다운로드하여 C : \ 5.6.31 \ xampp 및 C : \ 7.1.18 \ xampp와 같은 원하는 디렉토리에 설치하십시오.
  • 모든 설치 후에 설치된 디렉토리 (예 : C : \ 5.6.31 \ xampp, C : \ 7.1.18 \ xampp)로 이동하여 “setup_xampp.bat”를 시작하면 다음과 같은 내용
    이 표시됩니다.
  • 바탕 화면에서 “xampp-control.exe”바로 가기를 만들고 ( “xampp-control.exe”보내기-> 바탕 화면을 마우스 오른쪽 단추로 클릭) ex의 바로 가기 이름을 바꿀 수 있습니다. “xampp 5.6.31″및 “xampp 7.1.8”.
  • “xampp-control.exe”또는 이전에 작성된 바로 가기를 두 번 클릭하여 XAMPP 제어판을 시작하고 Apache 및 MySQL 서버를 시작하십시오.
  • 설치를 테스트하려면 브라우저를 열고 위치 표시 줄에 127.0.0.1 또는 localhost를 입력하십시오. XAMPP 시작 화면이 나타납니다.
  • XAMPP 제어판을 두 개 이상 열지 마십시오.
  • XAMPP 제거? “xampp”디렉토리를 제거하십시오. 그러나 전에 아파치와 mysql을 종료하십시오.
  • 그게 다야. 해당 XAMPP 제어판을 여는 다른 PHP 버전을 사용할 수 있습니다.

답변

저는 직장에서 10 살짜리 프로젝트를하고 있습니다. 5.6이 기본값입니다. 5.2에서만 작동하는 오래된 소규모 프로젝트가 있으며 7.3.8의 개인 프로젝트를 위해 새 버전으로 작업하고 싶습니다.

기본 5.6 버전에서 5.2 및 7.3.8을 추가 한 작업은 다음과 같습니다.

1-다운로드 PHP TS 버전;

2-c : \ xampp \ php738 및 c : \ xampp \ php52 폴더로 추출

3-이 행을 httpd-xampp.conf (또는 httpd.conf)의 맨 아래에 추가했습니다.

*** 중요 공지 : 스크립트 별칭 이름을 대상 폴더 이름으로 사용해서는 안됩니다. 서로 달라야합니다. (예를 들어 / php7x는 괜찮고 / php7은 그렇지 않습니다)

폴더 D : \ www \ php7 용 PHP 7.3.8

ScriptAlias /php7x "C:/xampp/php738"
Action application/x-httpd-php7-cgi /php7x/php-cgi.exe
<Directory "C:/xampp/php738">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
        Require all granted
    </Files>
</Directory>

<Directory "D:\www\php7">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php7-cgi
    </FilesMatch>
</Directory>

폴더 D : \ www \ php52 용 PHP 5.2

ScriptAlias /phpold "C:/xampp/php52"
Action application/x-httpd-phpold-cgi /phpold/php-cgi.exe
<Directory "C:/xampp/php52">
    AllowOverride None
    Options None
    Require all denied
    <Files "php-cgi.exe">
        Require all granted
    </Files>
</Directory>

<Directory "D:\www\php52">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-phpold-cgi
    </FilesMatch>
</Directory>

유용한 참고 사항 :

  • composer 스위치 터미널을 7.3.8로 사용하는 동안 php5.x에 문제가있는 경우
  • PHP 7.3.8을 Windows의 기본 명령 줄 PHP 인터프리터로 만들려면 PHP의 Windows 환경 경로를 7.3.8 폴더 경로로 변경하십시오.
  • 각 버전 폴더에서 필요에 따라 관련 php.ini conf를 편집하는 것을 잊지 마십시오.

마지막 보너스 노트로, 어떤 버전 으로든 가상 호스트를 설정해야하는 경우 비슷한 접근 방식을 사용할 수 있습니다. PHP 7.3.8의 샘플 laravel vhost conf;

<VirtualHost *:80>
ServerAdmin admin@laravel.local
DocumentRoot "D:\www\vhosts\laravel.local\public"
ServerName  laravel.local
<FilesMatch "\.php$">
 SetHandler application/x-httpd-php7-cgi # escape for default php version
#SetHandler application/x-httpd-phpold-cgi # unescape for php 5.2
</FilesMatch>

ErrorLog "logs/laravel.local.log"
CustomLog "logs/laravel.local.log" combined

자세한 답변을 위해 @Munim Munna 덕분에 위의 중요한 통지와 함께 견고한 샘플을 공유하려고했습니다.