我们正在使用PHP 7.0运行XAMPP,因为我们的新产品需要PHP 7。
但是有一些旧项目使用mysql_connect
等函数。这些在PHP 7.0中被删除。
那么,有没有办法在XAMPP中轻松更改PHP版本?
注意:请不要建议升级旧项目以兼容新版本,因为我无法做到这一点 作为开发人员(只是一名员工),我无法做出决定。
答案 0 :(得分:74)
您可以下载所需的任何PHP版本,并将它们放入自己的目录中,例如
c:\php5\
c:\php7\
您需要做的就是告诉您的Web服务器(Apache)使用哪个版本的PHP,您可以通过加载相应的模块来完成。在Apache中,您可以通过查找文件httpd.conf
然后编辑相应的行来执行此操作:
LoadModule php7_module c:\php7\libphp7.so
你必须找出正确的路径 - 这只是为了说明。
保存httpd.conf
并重新启动您的服务器。请注意,如果您不重新启动,则更改将无法生效。
没有GUI切换能够执行此操作,您需要编辑.conf
文件,然后重新启动Apache。这样做只需要几秒钟,你甚至可以注释掉一个版本,以便#34;切换"只需要几次按键,例如
使用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日:显然有些人说Windows上没有.so
个文件。我给出的答案改编自我在Mac上设置的内容(使用.so
文件而不是.dll
)。然而,答案的原则仍然完全正确。您正在使用Apache的配置文件httpd.conf
来指定 PHP模块(.so
或.dll
)所在的位置。因此Windows的唯一区别是文件名和/或路径位置。我给出的答案对于Apache / PHP的vanilla安装也是正确的(根本没有XAMPP)。
答案 1 :(得分:66)
为什么在可以使用多个PHP时在PHP版本之间切换 版本与单个xampp安装同时进行? 使用单个xampp安装,您有两个选项:
仅针对旧项目的目录运行较旧的PHP版本: 这大部分时间都会达到目的,你可能有一两个 您打算使用较旧的PHP版本运行的旧项目。 只需配置xampp即可运行较旧的PHP版本 那些项目目录。
在xampp的单独端口上运行较旧的PHP版本:有时您可能
当你需要运行时,将升级和旧项目升级到最新的PHP版本
关于新旧PHP版本的相同项目来回。
然后你可以在不同的端口上设置一个较旧的PHP版本(比如说8056)
所以当你去http://localhost/any_project/
xampp运行PHP 7
当你去http://localhost:8056/any_project/
xampp运行PHP
5.6
在虚拟主机上运行较旧的PHP版本:您可以创建虚拟主机 像localhost56一样运行PHP 5.6,而你可以在localhost上使用PHP 7.
让我们进行设置。
第1步:下载PHP
所以你在xampp下运行PHP 7,你想要为它添加一个旧的PHP版本,比如PHP 5.6。从php.net下载PHP zip存档的nts(非线程安全)版本(旧版本请参阅archive)并解压缩c:\xampp\php56
下的文件。线程安全版本不包括php-cgi.exe。
第2步:配置php.ini
在记事本中打开c:\xampp\php56\php.ini
文件。如果该文件不存在,请将php.ini-development
复制到php.ini
并在记事本中将其打开。然后取消注释以下行:
extension_dir = "ext"
第3步:配置apache
打开xampp控制面板,单击apache的配置按钮,然后单击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版本]
要在目录(htdocs56)上创建虚拟主机(localhost56)以在http://localhost56上使用PHP v5.6,请在所需位置创建目录htdocs56, 将localhost56添加到您的hosts文件(see how), 然后将以下代码添加到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控制面板重启apache。如果您选择了选项2,则可以看到xampp控制面板中列出的其他端口(8056)。
更新错误:
脚本格式错误的标题&#39; php-cgi.exe&#39;:标题错误
如果您遇到上述错误,请再次打开httpd-xampp.conf
并使用前导#(哈希字符)注释掉以下行。
SetEnv PHPRC "\\path\\to\\xampp\\php"
答案 2 :(得分:27)
答案 3 :(得分:13)
我建议使用Docker,这允许您将环境分成各种组件,并随时混合和匹配您想要的组件。
Docker将允许您使用MySQL运行一个容器,使用PHP运行另一个容器。因为它们是单独的图像,所以你可以有两个容器,一个是PHP 5,另一个是PHP 7,你可以启动你想要的一个容器,端口80可以映射到两个容器。
https://hub.docker.com提供了大量预配置图像,您可以轻松安装和运行这些图像。
我还添加了portainer作为图片,它允许您管理docker设置的各个方面 - 来自docker图像(我在启动时启动了这个容器以节省我必须使用命令行)。它并不能为您做任何事情,有时第一次从命令行配置和启动图像更容易,但是一旦设置完毕,您就可以通过Web界面启动和停止它们。
也可以同时运行两个容器并将各个端口映射到每个容器。所以端口80可以映射到PHP 5和81到PHP 81(如果你在2017年观看这个,则可以映射到PHP 7)。
有各种关于如何安装Docker(https://docs.docker.com/engine/installation/)以及其他“如何”输入内容的教程。请尝试http://www.masterzendframework.com/docker-development-environment/进行开发环境配置。
答案 4 :(得分:6)
您可以拥有两个不同版本的XAMPP。
答案 5 :(得分:4)
是的,你可以。我假设你已经安装了xampp。所以,
这就是我如何使用多个xampp安装
答案 6 :(得分:4)
我正在工作一个有十年历史的项目。因此5.6是我的默认设置。还有一些旧的小型项目仅适用于5.2,我也想使用7.3.8为我的个人项目开发新版本。
这是我在默认5.6版本上添加5.2和7.3.8的操作。
1-下载的php TS版本;
v7.3.8(latest):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的详细回答,我想与上面的重要声明分享一个可靠的示例。
答案 7 :(得分:3)
除非必须绝对且绝对是XAMPP,否则你可以尝试用WAMP获得你想要的东西。 WAMP在不同的包中几乎是一样的。
安装完成后,您可以在这里切换php版本:
您可以根据需要安装多个版本的PHP。
以下是详细说明。
请到这里:WAMP download
然后选择您的基本服务器,例如最新的php7。
然后,当安装WAMP 3时,转到文件夹: addons 并选择您所使用的php版本(或多个版本)。他们提供从php 5.3.29开始的php风格,它应该与mysql_connect一起使用。
要安装插件,在安装过程中(双击exe文件)只需指向安装了WAMP 3的文件夹。
然后您可以使用其他文件夹的内容,例如:应用程序等来添加更多功能
所有东西都是接口,因此您可以专注于编码而不是破坏您的环境。
答案 8 :(得分:3)
可以通过单个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
添加新的配置文件。在我的情况下,我复制了另一个XAMPP安装的conf文件,因为每个版本的语法可能略有不同。
修改httpd-xampp.conf.5.4.45
和httpd-xampp.conf.7.1
,并将php
目录的所有引用替换为新的php-X.X
版本。每个文件至少要进行10次更改。
您现在需要为两个版本编辑php.ini。例如,对于php 7.1,编辑C:\xampp\php-7.1.11\php.ini
,您将在其中替换include_path
,browscap
,error_log
,extension_dir
的php目录路径。
就是这样。您现在可以从XAMPP控制面板启动Apache。要从一个版本切换到另一个版本,您只需编辑C:\xampp\apache\conf\httpd.conf
并在重新启动Apache之前更改包含的PHP版本。
答案 9 :(得分:3)
在命令提示符窗口(cmd.exe)中运行它。
set PATH=C:\xampp\php;%PATH%
根据您安装php 7的位置进行更改。
答案 10 :(得分:2)
您不需要浪费时间使用此配置,只需使用MAMP :)
MAMP在界面上有一个PHP版本选择功能。
答案 11 :(得分:2)
我使用的是Uniserver。
内置了此功能。
就这么简单。
Uniform Server是适用于Windows的免费轻量级WAMP服务器解决方案。模块化设计小于24MB,包括最新版本的Apache2,Perl5,PHP(在PHP53,PHP54,PHP55或PHP56之间切换),MySQL5或MariaDB5,phpMyAdmin或Adminer4。无需安装!没有注册表灰尘!只需打开包装即可开启!
它甚至可以通过闪存驱动器运行。有cron仿真,支持perl,mariaDB,几个版本的Mysql,filezilla服务器和其他一些东西。
答案 12 :(得分:1)
我只想分享我的新发现:https://laragon.org/docs/index.html
我只用了 1 小时,看起来很有希望。
How to add another PHP version to Laragon
How to add phpMyAdmin to Laragon
我与 Laragon 没有任何关联。刚刚在 Google 上找到它,寻找“XAMPP Windows 替代品”
答案 13 :(得分:1)
按照此简单步骤进行操作。我目前在PHP 7.2上运行XAMPP,但需要PHP 5.6才能在旧项目上工作
STEP 1
在https://windows.php.net/download上下载PHP的线程安全版本
将文件放入[Drive]:\ xampp \ php5.6
第2步
复制[驱动器]:\ xampp \ apache \ conf \ extra \ httpd-xampp.conf
将其重命名为[Drive]:\ 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步
编辑文件[Drive]:\ 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”
STEP 6
启动Apache
STEP 7
在Windows上编辑PHP环境变量路径
答案 14 :(得分:1)
这可能是对该问题的最不专业的答案,但这也是最简单的实现。
如果您有两个驱动器,例如 C:和 D:,则可以在两个具有不同php版本的驱动器上安装XAMPP的单独实例。这花了我不到10分钟的时间,而且最不容易出错。
我只是创建两个xampp-control.exe的桌面快捷方式,并以它们的php版本命名。我希望这可以帮助像我这样的人,他们喜欢一个非常快速和肮脏的解决方案。
答案 15 :(得分:0)
PHP 的版本可以在 .htaccess 文件中指定。这意味着虽然大多数项目可以默认为 httpd.conf 文件中的全局配置,但只需编辑 .htaccess 即可将特定项目设置为不同的版本。
使用.htaccess的好处是不同的项目可以使用不同的PHP版本,而无需不断修改httpd.conf来指定不同项目目录需要哪个PHP。相反,可以直接在项目本身内进行更改,只需编辑其 .htaccess 文件即可。
所需的确切线路因您的设置而异。对我来说,使用 Fast CGI,我只需在我想使用 PHP 8 的那些项目的 .htaccess 文件中添加以下行(PHP 7 是我服务器上的默认设置)。
FcgidWrapper "C:/xampp/php-8.0.6-nts-Win32-vs16-x64/php-cgi.exe -c C:/xampp/php-8.0.6-nts-Win32-vs16-x64" .php
字符串的第一部分引用 PHP 可执行文件,而 -c
选项用于指定所需 php.ini 文件的目录路径。如果省略此项,将使用全局配置的 php.ini。
答案 16 :(得分:0)
在安装magento2时,我确实遇到了同样的问题,虽然它需要〜7.3.0,但我有7.4.1。因此,我使用这种方法将php版本降级。
第1步:从此处下载php版本nts版本 https://windows.php.net/downloads/releases/archives/ 并将此版本粘贴到名为“ php71”的c:\ xampp \
步骤2:设置虚拟主机环境并进行其他一些更改。 转到“ c:\ xampp / \ pache \ conf \ extra \ httpd-vhosts.conf”,并将代码段放在行尾
<VirtualHost 127.0.0.1:80>
DocumentRoot "C:/xampp/htdocs/magento/crashcourse/"
ServerName magento2.test
<Directory "C:/xampp/htdocs/magento/crashcourse/">
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php71-cgi
</FilesMatch>
</VirtualHost>
转到“ C:\ Windows \ System32 \ drivers \ etc \ hosts”,然后使用管理员权限编辑文件,然后在行尾添加代码。
127.0.0.1 magento2.test
转到您的Apache Config文件“ c:/xampp/apache/conf/extra/httpd-xampp.conf”,然后将以下代码粘贴到该行的末尾
ScriptAlias /php71 "C:/xampp/php71"
Action application/x-httpd-php71-cgi /php71/php-cgi.exe
<Directory "C:/xampp/php71">
AllowOverride None
Options None
Require all denied
<Files "php-cgi.exe">
Require all granted
</Files>
SetEnv PHPRC "C:/xampp/php71"
</Directory>
现在,一切就绪。 转到网址:http://magento2.test一切正常!
答案 17 :(得分:0)
我知道这是旧帖子,但我想分享一个在PHP 7中仍在运行mysql_connect()的库。 它通过重写实际函数来工作(在此库上工作的mysqli_connect()覆盖了mysql_connect()。)
我从这部视频https://www.youtube.com/watch?v=Eqd-jJu4sQ4
中发现了希望对您有帮助
答案 18 :(得分:0)
使用此php switcher
您可以通过vhost配置将php版本控制到所需的任何项目。
答案 19 :(得分:0)
我需要做同样的事情,所以我用google搜索堆栈溢出,OP有同样的问题...所以我的发现..我尝试重命名来自所有不同方向的文件,我的结论基本上这花了我太久了。 SOOOO我最终只是从这里安装版本7:
https://www.apachefriends.org/index.html (在尝试之前终止服务并退出xampp)
当被问到将目录名放在哪里时(给它一个不同的名字):
和
DONEZO!现在只需要确保杀死服务并在来回交换之前退出,并且你有2个无菌的XAMPP环境可以玩...
万岁!现在我真的可以上班了!
答案 20 :(得分:0)
也许有点晚了,但我正在使用批处理来重命名PHP文件夹(我在几年前发现的phpswitch的略微修改版本)。
将不同的文件夹复制到XAMPP安装中。每个PHP文件夹(活动文件夹除外)都接收版本号作为后缀(例如 php_5.6.32 )。在 ALL PHP文件夹中,创建了一个文件(PHP_VERSION),该文件仅包含相应的版本号,因此脚本可以获取此信息。但这些都在README中有所描述。
自PHP7起, httpd-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);