새 제품에는 PHP 7이 필요하기 때문에 PHP 7.0에서 XAMPP를 실행하고 있습니다.
그러나와 같은 기능을 사용하는 오래된 프로젝트가 있습니다 mysql_connect
. PHP 7.0에서 제거되었습니다.
그렇다면 XAMPP에서 PHP 버전을 쉽게 변경하는 방법이 있습니까?
참고 : 개발자 (직원)가 될 수없는 결정으로 인해 이전 프로젝트를 새 버전과 호환되도록 업그레이드하지 마십시오.
새 제품에는 PHP 7이 필요하기 때문에 PHP 7.0에서 XAMPP를 실행하고 있습니다.
그러나와 같은 기능을 사용하는 오래된 프로젝트가 있습니다 mysql_connect
. PHP 7.0에서 제거되었습니다.
그렇다면 XAMPP에서 PHP 버전을 쉽게 변경하는 방법이 있습니까?
참고 : 개발자 (직원)가 될 수없는 결정으로 인해 이전 프로젝트를 새 버전과 호환되도록 업그레이드하지 마십시오.
답변:
단일 xampp 설치로 여러 PHP 버전 을 동시에 사용할 수 있는데 왜 PHP 버전간에 전환해야 합니까? 단일 xampp 설치로 두 가지 옵션이 있습니다.
이전 프로젝트의 디렉토리에 대해서만 이전 PHP 버전을 실행하십시오. 대부분의 경우에 해당되며 이전 PHP 버전으로 실행하려는 하나 또는 두 개의 이전 프로젝트가있을 수 있습니다. 해당 프로젝트 디렉토리에 대해서만 이전 PHP 버전을 실행하도록 xampp를 구성하십시오.
별도의 xampp 포트에서 이전 PHP 버전을 실행하십시오. 때때로 새로운 PHP 버전과 이전 PHP 버전에서 동일한 프로젝트를 실행해야 할 때 때때로 이전 프로젝트를 최신 PHP 버전으로 업그레이드 할 수 있습니다. 그런 다음 다른 포트 (예 : 8056)에 이전 PHP 버전을 설정할 수 있으므로 http://localhost/any_project/
xampp 로 이동하면 PHP 7이 http://localhost:8056/any_project/
실행 되고 xampp 로 이동하면 PHP 5.6이 실행됩니다.
가상 호스트에서 이전 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 somefile.php
wihout 과 같은 명령 줄에서 PHP 파일을 실행할 수 있습니까 ?
SetEnv PHPRC
되어 있지 않으므로 주석 처리 할 수 없지만 여전히 오류가 발생합니다. :(
Error message: End of script output before headers: php-cgi.exe
필요한 모든 버전의 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 일 편집 : 일부 사람들은 .so
Windows에 파일 이 없다고 말합니다 . 내가 준 대답은 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를 사용합니다.
이 기능이 내장되어 있습니다.
그렇게 간단합니다.
Uniform Server는 Windows 용 무료 경량 WAMP 서버 솔루션입니다. 24MB 미만의 모듈 식 디자인에는 최신 버전의 Apache2, Perl5, PHP (PHP53, PHP54, PHP55 또는 PHP56 간 전환), MySQL5 또는 MariaDB5, phpMyAdmin 또는 Adminer4가 포함됩니다. 설치가 필요 없습니다! 레지스트리 먼지가 없습니다! 포장을 풀고 발사하십시오!
심지어 플래시 드라이브를 사용합니다. cron 에뮬레이션, perl, mariaDB, 몇 가지 버전의 MySQL, filezilla 서버 및 기타 몇 가지를 지원합니다.
XAMPP의 두 가지 버전이있을 수 있습니다.
저는 직장에서 10 살짜리 프로젝트를하고 있습니다. 5.6이 기본값입니다. 5.2에서만 작동하는 오래된 소규모 프로젝트가 있으며 7.3.8의 개인 프로젝트를 위해 새 버전으로 작업하고 싶습니다.
기본 5.6 버전에서 5.2 및 7.3.8을 추가 한 작업은 다음과 같습니다.
1-다운로드 PHP TS 버전;
v7.3.8 (최신) : https://windows.php.net/download/
2-c : \ xampp \ php738 및 c : \ xampp \ php52 폴더로 추출
3-이 행을 httpd-xampp.conf (또는 httpd.conf)의 맨 아래에 추가했습니다.
*** 중요 공지 : 스크립트 별칭 이름을 대상 폴더 이름으로 사용해서는 안됩니다. 서로 달라야합니다. (예를 들어 / php7x는 괜찮고 / php7은 그렇지 않습니다)
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>
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>
유용한 참고 사항 :
마지막 보너스 노트로, 어떤 버전 으로든 가상 호스트를 설정해야하는 경우 비슷한 접근 방식을 사용할 수 있습니다. 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 덕분에 위의 중요한 통지와 함께 견고한 샘플을 공유하려고했습니다.
절대적으로 XAMPP가 아닌 이상 WAMP로 원하는 것을 얻을 수 있습니다. WAMP는 다른 패키지에서 거의 동일합니다.
일단 설치하면 여기에서 PHP 버전 사이를 전환 할 수 있습니다.
필요한만큼 많은 버전의 PHP를 설치할 수 있습니다.
자세한 방법은 다음과 같습니다.
여기로 가십시오 : WAMP 다운로드
그런 다음 php7과 같은 최신 서버를 선택하십시오.
그런 다음 WAMP 3이 설치되면 폴더 : addons 로 이동하여 사용중인 PHP 버전을 선택하십시오. 그들은 php 5.3.29에서 시작하는 php 맛을 제공하며, mysql_connect와 함께 작동합니다.
애드온을 설치하려면 설치하는 동안 (exe 파일을 두 번 클릭) WAMP 3이 설치된 폴더를 가리 킵니다.
그런 다음 응용 프로그램 등과 같은 다른 폴더의 내용을 사용 하여 더 많은 기능을 추가 할 수 있습니다
모든 것이 인터페이스되어 있으므로 코딩에 집중하고 환경을 해킹하지 않을 수 있습니다.
그래 넌 할수있어. xampp이 이미 설치되어 있다고 가정합니다. 그래서,
여러 xampp가 설치된 상태에서 작업하고 있습니다
단일 XAMPP 설치로 여러 버전의 PHP를 설정할 수 있습니다. 아래 지침은 Windows에서 작동합니다.
C:\xampp\php
가 C:\xampp\php-7.1.11
.C:\xampp\php-5.4.45
.이제 XAMPP 및 Apache 구성을 편집해야합니다.
C:\xampp\apache\conf\httpd.conf
PHP에 대한 XAMPP 설정을 찾습니다. 다음과 같이 변경해야합니다.#
다른 PHP 버전 에 주석을 달아야하는 경우 ( 한 번에 하나만 Include
해석 됨).
#XAMPP settings PHP 7
Include "conf/extra/httpd-xampp.conf.7.1"
#XAMPP settings PHP 5.4.45
#Include "conf/extra/httpd-xampp.conf.5.4.45"
이제 C:\xampp\apache\conf\extra
디렉토리에서로 이름 httpd-xampp.conf
을 바꾸고 에 httpd-xampp.conf.7.1
대한 새 구성 파일을 추가하십시오 httpd-xampp.conf.5.4.45
. 필자의 경우 구문마다 버전이 약간 다를 수 있으므로 PHP 5.5 용 XAMPP의 다른 설치의 conf 파일을 복사했습니다.
디렉토리에 대한 모든 참조를 편집 httpd-xampp.conf.5.4.45
하고 새 버전으로 바꿉니다. 각 파일마다 최소한 10 개의 변경 사항이 있습니다.httpd-xampp.conf.7.1
php
php-X.X
이제 두 버전의 php.ini를 편집해야합니다. PHP 7.1, 편집에 대한 예를 들어 C:\xampp\php-7.1.11\php.ini
당신의 PHP 디렉토리의 경로를 대체 할 것이다 include_path
, browscap
, error_log
, extension_dir
..
그리고 그게 다야. 이제 XAMPP 제어판에서 Apache를 시작할 수 있습니다. 버전에서 다른 버전으로 전환하려면 C:\xampp\apache\conf\httpd.conf
Apache를 다시 시작하기 전에 포함 된 PHP 버전 을 편집 하고 변경하기 만하면됩니다.
이것은 아마도 질문에 대한 가장 기술적 인 대답 일 수도 있지만 달성하기가 가장 쉽습니다.
C : 및 D : 와 같은 두 개의 드라이브가있는 경우 PHP 버전이 다른 두 드라이브에 별도의 XAMPP 인스턴스를 설치할 수 있습니다. 이 작업을 수행하는 데 10 분도 걸리지 않았으며 오류가 가장 적습니다.
xampp-control.exe에 대한 두 개의 바탕 화면 바로 가기를 만들고 PHP 버전 다음에 바로 가기 이름을 지정합니다. 나는 이것이 매우 빠르고 더러운 솔루션을 선호하는 나와 같은 누군가를 돕기를 바랍니다.
이것을 따르십시오 쉬운 단계를 . 현재 PHP 7.2에서 XAMPP를 실행하고 있지만 오래된 프로젝트에서 작동하려면 PHP 5.6이 필요합니다.
1 단계
PHP의 Thread Safe 버전을 다운로드하십시오 https://windows.php.net/download 하십시오
[드라이브]에 파일 저장 : \ xampp \ php5.6
2 단계
[드라이브] : \ xampp \ apache \ conf \ extra \ httpd-xampp.conf를 복사하십시오.
이름을 [드라이브] : \ xampp \ apache \ conf \ extra \ httpd-xampp5.6.conf로 바꾸십시오. PHP 버전에 따라 파일 이름을 바꿉니다.
3 단계
새로 작성된 'httpd-xampp5.6.conf'를 편집하십시오.
기본적으로 모든 PHP 소스와 .dll을 변경해야합니다.
전에
LoadFile "C:/xampp/php/php7ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"
후
LoadFile "C:/xampp/php5.6/php5ts.dll"
LoadFile "C:/xampp/php5.6/libpq.dll"
LoadModule php5_module "C:/xampp/php5.6/php5apache2_4.dll"
여기 내 파일이 있습니다 : https://gist.github.com/mpalencia/f8a20c31bffb02fe20d371218c23d1ec
4 단계
[드라이브] : \ xampp \ apache \ conf \ httpd.conf 파일을 편집하십시오.
전에
# XAMPP settings
Include "conf/extra/httpd-xampp.conf"
후
# XAMPP settings
Include "conf/extra/httpd-xampp5.6.conf"
5 단계
PHP 5.6 구성 편집-php.ini
확장 디렉토리를 추가하십시오 : extension_dir = "C : \ xampp \ php5.6 \ ext"
6 단계
아파치 시작
7 단계
Windows에서 PHP 환경 변수 경로 편집
어쩌면 조금 늦었지만 배치를 사용하여 PHP 폴더의 이름을 바꿉니다 ( 수년 전에 찾은 phpswitch 의 약간 수정 된 버전 ).
다른 폴더를 XAMPP 설치에 복사합니다. 각 PHP 폴더 (활성 폴더 제외)는 버전 번호를 접미사로받습니다 (예 : php_5.6.32 ). 에서 ALL 스크립트는이 정보를 잡을 수 있도록 PHP 폴더, 파일 (PHP_VERSION는) 만 각각의 버전 번호를 포함하는 생성됩니다. 그러나 그것은 모두 README에 설명되어 있습니다.
PHP7 이후 아파치 - xampp.conf의 로드 php7ts.dll 대신 php5ts.dll . 그래서 동일한 접근 방식에 따라 스크립트 (PHPSwitch.php)를 확장하여 구성 파일의 이름을 바꾸어야했습니다.
$renameCur = new PHPSwitch_Rename($currInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName'] . '_' . $currInst['version']);
$renameNew = new PHPSwitch_Rename($newInst['path'], $this->_cfg['phpInstallationsPath'] . $this->_cfg['phpDirName']);
$apache_curent = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp.conf";
$apache_curent_rename = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp_".$currInst['version'].".conf";
$apache_new = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp_".$newInst['version'].".conf";
$apache_new_rename = $this->_cfg["phpInstallationsPath"]."apache/conf/extra/httpd-xampp.conf";
$renameCur_apache_conf = new PHPSwitch_Rename($apache_curent, $apache_curent_rename);
$renameNew_apache_conf = new PHPSwitch_Rename($apache_new, $apache_new_rename);
$transaction = new PHPSwitch_Rename_Transaction();
$transaction->add($renameCur);
$transaction->add($renameNew);
$transaction->add($renameCur_apache_conf);
$transaction->add($renameNew_apache_conf);
나는 똑같은 일을해야했기 때문에 OP가 같은 문제를 겪고있는 곳에서 오버플로가 발생하는 방법과 방법을 봤다. 너무 오래. SOOOO 나는 여기에서 버전 7을 설치하게되었습니다.
https://www.apachefriends.org/index.html (시도하기 전에 서비스 종료 및 xampp 종료)
디렉토리 이름을 어디에 넣을 것인지 묻는 메시지가 나타나면 다른 이름을 지정하십시오.
과
DONEZO! 이제 서비스를 중지하고 앞뒤로 스와핑하기 전에 종료하고 2 개의 멸균 XAMPP 환경이 있습니다.
만세! 이제 실제로 일을 할 수 있습니다!
vhost 설정을 통해 원하는 프로젝트로 PHP 버전을 제어 할 수 있습니다.
나는 이것이 오래된 게시물이라는 것을 알고 있지만 PHP 7에서 여전히 mysql_connect ()를 실행하기위한 라이브러리가 있음을 공유하고 싶습니다. 실제 함수를 재정 의하여 작동합니다 (mysql_connect ()는이 라이브러리에서 작동하는 mysqli_connect ()로 재정의 됨)).
이 비디오에서 찾았습니다 https://www.youtube.com/watch?v=Eqd-jJu4sQ4
잘하면 그것은 도움이됩니다