有没有办法在XAMPP中使用两个PHP版本?

I a*_*son 137 php xampp

我们正在使用PHP 7.0运行XAMPP,因为我们的新产品需要PHP 7.

但是有一些旧项目使用类似函数等mysql_connect.这些在PHP 7.0中被删除.

那么有没有办法在XAMPP中轻松更改PHP版本.

注意:请不要建议将旧项目升级到与新版本兼容,因为我无法做到这一点,因为我无法作为开发人员(只是一名员工)做出这些决定.

And*_*ndy 85

您可以下载所需的任何PHP版本,并将它们放入自己的目录中,例如

c:\php5\

c:\php7\

您需要做的就是告诉您的Web服务器(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
Run Code Online (Sandbox Code Playgroud)

使用PHP 7:

#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so
Run Code Online (Sandbox Code Playgroud)

您不需要多个版本的XAMPP,或双启动,或使用不同的计算机,或任何其他建议复杂的解决方案的"解决方案".OP希望使用XAMPP并告诉它使用哪个版本的PHP.这是最快捷,最有效的方法,只需要安装一个XAMPP.

编辑2017年11月1日:显然有些人说.soWindows 上没有文件.我给出的答案改编自我在Mac上设置的东西(它确实使用.so文件而不是.dll).然而,答案的原则仍然完全正确.您正在使用Apache的配置文件,httpd.conf指定其中的PHP模块(.so.dll)位于您的系统上.因此Windows的唯一区别是文件名和/或路径位置.我给出的答案对于Apache/PHP的vanilla安装也是正确的(根本没有XAMPP).

  • 在v3.2.2中,该行位于xampp/apache/conf/extra/httpd-xampp.conf中 (16认同)
  • 它不仅仅是一条线.你必须编辑httpd-xampp.conf的很大一部分.因此,每次必须切换整个httpd-xampp.conf更好. (5认同)
  • 我检查了一下.我找不到.你能查一下我的httpd.conf文件吗?这是它的副本.http://freetexthost.com/sjxz4lh1i5如果您发现我应该更改的行,请告诉我. (3认同)
  • 我认为你的答案是最好的,我会接受它。但我在 `httpd/conf` 中找不到与 'LoadModule php7_module c:\php7\libphp7.so' 类似的行 (2认同)
  • 没有任何libphp7.so进入XAMPP,任何LoadModule字符串进入conf文件 (2认同)
  • 我也找不到这个条目.我也搜索了我的php目录,根本找不到任何.so文件. (2认同)
  • @IamtheMostStupidPerson 显然这不是一个简单的单行,它将是许多行的替换。这个网站非常详细:https://silas.com.ng/multiple-php-version-xampp-windows/ (2认同)
  • 我不明白为什么答案仍然没有被接受。 (2认同)

Mun*_*nna 83

为什么在单个xampp安装的同时可以同时使用多个 PHP版本时在PHP版本之间切换?使用单个xampp安装,您有2个选项:

  1. 仅为旧项目的目录运行较旧的PHP版本: 这将在大多数情况下用于此目的,您可能有一个或两个旧项目,您打算使用较旧的PHP版本运行.只需配置xampp即可为这些项目目录运行较旧的PHP版本.

  2. 在xampp的单独端口上运行较旧的PHP版本:有时,当您需要在新旧PHP版本上来回运行相同项目时,您可能正在将旧项目升级到最新的PHP版本.然后你可以在不同的端口上设置一个较旧的PHP版本(例如8056),所以当你去http://localhost/any_project/xampp运行PHP 7时,当你去http://localhost:8056/any_project/xampp运行PHP 5.6.

  3. 在虚拟主机上运行较旧的PHP版本:您可以创建虚拟主机(如localhost56)以运行PHP 5.6,同时可以在localhost上使用PHP 7.

让我们进行设置.

第1步:下载PHP

所以你在xampp下运行PHP 7,你想要添加一个旧的PHP版本,比如PHP 5.6.从php.net下载PHP zip存档的nts(Non Thread Safe)版本(参见旧版本的存档)并解压缩下的文件c:\xampp\php56.线程安全版本不包括php-cgi.exe.

第2步:配置php.ini

c:\xampp\php56\php.ini在记事本中打开文件.如果文件不存在则复制php.ini-developmentphp.ini并在记事本中打开它.然后取消注释以下行:

extension_dir = "ext"
Run Code Online (Sandbox Code Playgroud)

第3步:配置apache

打开xampp控制面板,单击apache的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>
Run Code Online (Sandbox Code Playgroud)

注意: 如果需要,可以在步骤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>
Run Code Online (Sandbox Code Playgroud)

第4步(选项2): [在单独的端口上运行较旧的PHP版本]

现在要将PHP v5.6设置为端口8056,将以下代码添加到配置文件的底部.

Listen 8056
<VirtualHost *:8056>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

第4步(选项3): [在虚拟主机上运行较旧的PHP版本]

要在目录(htdocs56)上创建虚拟主机(localhost56)以在http:// localhost56上使用PHP v5.6 ,在所需位置创建目录htdocs56并将localhost56添加到主机文件(请参阅如何),然后添加以下代码到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>
Run Code Online (Sandbox Code Playgroud)

完成:保存并重新启动Apache

保存并关闭配置文件,从xampp控制面板重启apache.如果您选择了选项2,则可以看到xampp控制面板中列出的其他端口(8056).

在此输入图像描述

更新错误:
来自脚本'php-cgi.exe'的格式错误的标头:错误的标头

如果遇到上述错误,请httpd-xampp.conf再次打开并使用前导#(哈希字符)注释掉以下行.

SetEnv PHPRC "\\path\\to\\xampp\\php"
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我正在尝试这种方法(步骤4选项1),但从脚本'php-cgi.exe'得到一个错误格式错误的标题:错误的标题:<br />,任何想法可能是什么问题? (6认同)
  • 答案甚至不再包含包含“SetEnv PHPRC”的代码,因此我无法将其注释掉,但我仍然收到该错误。:( (3认同)
  • 你好。当我运行 localhost:8056 时,我得到对象未找到页面。 (3认同)
  • 有人能够使用 xdebug 运行多个 php 版本吗?我收到“错误消息:标题之前的脚本输出结束:php-cgi.exe” (2认同)

Mau*_*ani 30

你可以像我一样下载并安装两个不同的xampps :(首先是php7,第二个是php5) 在此输入图像描述

如果您不想这样做,我建议您使用wamp并更改此处显示的版本.

  • 这里不需要关心最佳实践,这是一个本地环境 (19认同)
  • _为什么要这样做?_因为它有效,我不介意安装多个apache和mysql,如果它节省了一些时间. (11认同)
  • 你为什么要这样做?你正在重新安装很多相同的软件,只是为了一点点差异(不同版本的PHP,当Apache和MySQL等其他软件完全相同时).我发布了一个解决方案,您只需使用1个XAMPP安装并将其指向适当的PHP版本即可. (4认同)
  • 虽然它确实有效,但它不是最佳做法. (2认同)
  • 除此以外,我建议您使用此方法,建议您为每个安装添加特定的开始菜单项,例如:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ XAMPP56和C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ XAMPP7例如 (2认同)
  • 如果这不是一个好的解决方案,为什么你没有发布正确的解决方案?实际上很难在同一个xampp上安装2个版本,这里的所有解决方案都是错误的...... (2认同)

Nig*_*Ren 12

我建议使用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/以获取开发环境配置.

  • Errrr ......我的意思是81(我确保我的答案是未来的证据: - /) (2认同)
  • @NigelRen 我没有对它投反对票,但我猜这是因为你提议使用一个完全不同的解决方案(Docker),而不是解决在 XAMPP 中它是如何可能的——这绝对是。您的回答是问题的(非常好的)替代解决方案,但不是所问问题的答案。 (2认同)

Erd*_*acı 9

我正在工作一个十年前的项目。所以 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/

  • v5.2:https ://www.apachelounge.com/viewtopic.php ? t = 7349

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>
Run Code Online (Sandbox Code Playgroud)

文件夹 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>
Run Code Online (Sandbox Code Playgroud)

一些有用的注意事项:

  • 如果您在使用 composer 将终端切换到 7.3.8 时遇到 php5.x 问题
  • 如果您想让 php 7.3.8 成为 Windows 上的默认命令行 php 解释器,只需将 php 的 Windows 环境路径更改为 7.3.8 文件夹路径。
  • 不要忘记在每个版本文件夹中根据需要编辑相关的 php.ini confs。

作为最后一个额外说明,如果您需要使用任何版本设置虚拟主机,您可以使用类似的方法。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
Run Code Online (Sandbox Code Playgroud)

感谢@Munim Munna 的详细回答,我想与上面的重要通知分享一个可靠的样本。


小智 6

您可以拥有两个不同版本的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"发送到 - >桌面)并重命名前面的快捷方式."xampp 5.6.31"和"xampp 7.1.8".
  • 双击"xampp-control.exe"或以前创建的快捷方式启动XAMPP控制面板,启动Apache和MySQL服务器.
  • 要测试安装,请打开浏览器并在位置栏中键入127.0.0.1或localhost.您应该看到XAMPP开始屏幕.
  • 不要打开多个XAMPP控制面板.
  • XAMPP卸载?只需删除"xampp"目录即可.但是之前请关闭apache和mysql.
  • 就这样.您可以使用不同的php版本打开相应的XAMPP控制面板.


Ada*_*dvy 6

在命令提示符窗口 (cmd.exe) 中运行它。

set PATH=C:\xampp\php;%PATH%
Run Code Online (Sandbox Code Playgroud)

根据您安装 php 7 的位置进行更改。


小智 6

我最近也遇到了同样的情况,我通过以下步骤解决了:

步骤 1 :从php.net下载 nts(非线程安全)版本的 PHP zip 存档。然后将其解压到 xampp 文件夹中,与默认 php 文件夹处于同一级别。xampp 文件夹现在看起来像这样:

在此输入图像描述

第2步:

  • 打开下载的php文件夹。将文件复制php.ini-developmentphp.ini并使用任何编辑器(记事本、notepadd++...)打开它。按Ctrl+F组合键并查找文本:extension_dir = "ext"然后通过删除行开头的分号来取消注释该行。

在此输入图像描述

  • 执行相同操作以取消注释以下行:extension=curl extension=ftp extension=fileinfo extension=mysqli extension=openssl extension=pdo_mysql

在此输入图像描述

步骤3:

  • 转到该文件夹​​,使用路径xampp打开文件(替换为安装 xampp 的驱动器磁盘)。httpd-xampp.conf{disk_name}/xampp/apache/conf/extra/httpd-xampp.conf{disk name}
  • 例如,我将 xampp 安装在 D 盘, httpd-xampp.conf现在打开该文件的路径将是D:\xampp\apache\conf\extra\httpd-xampp.conf.
  • 或者更简单,打开 xampp 控制面板,单击 apache 的配置按钮,然后单击 Apache ( httpd-xampp.conf)。

在此输入图像描述

  • 接下来,在文件末尾添加以下代码httpd-xampp.conf,然后将/php8_1和更改D:/xampp/php8_1/为 php 文件夹的名称和路径。
ScriptAlias /php8_1/ "D:/xampp/php8_1/" 
Action application/x-httpd-php8_1-cgi "/php8_1/php-cgi.exe" 
<Directory "D:/xampp/php8_1">
       AllowOverride None
       Options None
       Require all denied
       <Files "php-cgi.exe">
           Require all granted
       </Files>     SetEnv PHPRC "D:/xampp/php8_1" 
</Directory> 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 例如:如果您的php文件夹名称是php6_5,文件夹路径是,C:/xampp/php6_5/则代码将为:
ScriptAlias /php6_5 "C:/xampp/php6_5/"
Action application/x-httpd-php6_5-cgi "/php6_5/php-cgi.exe"
<Directory "C:/xampp/php6_5">
     AllowOverride None
     Options None
     Require all denied
        <Files "php-cgi.exe">
            Require all granted
        </Files>
        SetEnv PHPRC "C:/xampp/php6_5/"
 </Directory>
Run Code Online (Sandbox Code Playgroud)
  • 注意XAMPP:如果需要,您可以按照步骤 1 到 3 将更多版本的 PHP 添加到安装中。

步骤 4:添加运行特定 PHP 版本的目录

  • 只需在配置文件底部添加以下内容(httpd-xampp.conf来自步骤 3)即可设置目录。
<Directory "C:\xampp\htdocs\my_project1">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php5_6-cgi //replace php5_6 with your version php
    </FilesMatch>
</Directory>

<Directory "C:\xampp\htdocs\my_project2">
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php8_1-cgi //replace php8_1with your version php
    </FilesMatch>
</Directory>
Run Code Online (Sandbox Code Playgroud)
  • 您可以在下图中看到说明

在此输入图像描述

第5步:保存并重启XAMPP

  • 保存并关闭配置文件。从 xampp 控制面板重新启动 apache。如果要检查配置是否成功,可以创建一个index.php文件并<?php echo phpinfo()检查php版本。

现在,我将展示我的结果

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述


shu*_*vro 5

是的你可以。我假设您已经安装了 xampp。所以,

  • 关闭所有 xampp 实例。使用任务管理器停止 apache 和 mysqld。
  • 然后将 xampp 重命名为 xampp1 或 xampp 名称之后的其他名称。
  • 现在下载另一个 xampp 版本。仅创建文件夹名称 xampp。在那里安装下载的 xampp。
  • 现在,根据您要求的 xampp 版本,只需将目标文件夹重命名为 xampp only,将其他文件夹重命名为不同的名称。

这就是我安装多个 xampp 的方式

  • 不知道为什么这会被否决,因为这个答案确实有效并且正是问题所问的问题。一般而言,在没有提出改进建议的情况下进行无声的拒绝投票根本不是一件聪明的事情。 (5认同)

Jef*_*ffz 5

除非必须绝对是XAMPP,否则您可以尝试使用WAMP获得想要的东西。WAMP在不同的包装中几乎是同一件事。

安装完成后,您可以在以下php版本之间进行切换:

在此处输入图片说明

您可以根据需要安装任意数量的PHP版本。

详细说明如下。

只需转到此处:WAMP下载

然后选择您的基本服务器,例如最新的php7。

然后,在安装WAMP 3后,转到文件夹:addons并选择要使用的php版本。他们提供了从5.3.29开始的php版本,应该与mysql_connect一起使用。

要安装插件,请在安装过程中(双击exe文件)指向安装了WAMP 3的文件夹。

然后,您可以使用其他文件夹的内容,例如:应用程序等,以添加更多功能

一切都已接口,因此您可以专注于编码,而不会破坏您的环境。


max*_*039 5

可以使用单个 XAMPP 安装设置多个版本的 PHP。以下说明适用于 Windows。

  1. 安装适用于 Windows 的最新 XAMPP 版本(在我的情况下是使用 PHP 7.1)
  2. 确保 Apache 没有从 XAMPP 控制面板运行
  3. 重命名XAMPP的PHP目录的安装目录,如C:\xampp\php成为C:\xampp\php-7.1.11
  4. 下载您想另外运行的 PHP 版本(例如:PHP 5.4.45
  5. 将 php 目录从您下载的版本移动到 XAMPP 安装目录。重命名它,使其包含 PHP 版本。比如C:\xampp\php-5.4.45

现在您需要编辑 XAMPP 和 Apache 配置:

  1. 在 中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"
Run Code Online (Sandbox Code Playgroud)
  1. 现在在C:\xampp\apache\conf\extra目录中重命名httpd-xampp.confhttpd-xampp.conf.7.1并添加一个新的配置文件httpd-xampp.conf.5.4.45。就我而言,我复制了另一个 XAMPP for php 5.5 安装的 conf 文件,因为每个版本的语法可能略有不同。

  2. 使用新版本编辑httpd-xampp.conf.5.4.45httpd-xampp.conf.7.1替换对php目录的所有引用php-X.X。每个文件至少要在此处进行 10 次更改。

  3. 您现在需要为两个版本编辑 php.ini。例如,对于 php 7.1,编辑C:\xampp\php-7.1.11\php.ini您将替换include_pathbrowscaperror_log、的 php 目录路径的位置extension_dir

就是这样。您现在可以从 XAMPP 控制面板启动 Apache。要从一个版本切换到另一个版本,您只需要C:\xampp\apache\conf\httpd.conf在重新启动 Apache 之前编辑和更改包含的 PHP 版本。


Art*_*nix 5

我使用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服务器以及其他一些功能。

在此处输入图片说明