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

2022-08-30 06:10:24

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

但是有些旧项目使用诸如 等功能。这些在 PHP 7.0 中被删除。mysql_connect

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

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


答案 1

当您可以通过单个 xampp 安装同时使用多个 PHP 版本时,为什么要在 PHP 版本之间切换?

通过单个 xampp 安装,您有 2 个选项:

  1. 仅对旧项目的目录运行较旧的 PHP 版本:这将在大多数时候达到目的。您可能有一个或两个旧项目打算使用较旧的PHP版本运行。只需将 xampp 配置为仅针对这些项目目录运行较旧的 PHP 版本即可。

  2. 在单独的 xampp 端口上运行较旧的 PHP 版本:有时,您可能要将旧项目升级到最新的 PHP 版本,同时需要在新的 PHP 版本和旧的 PHP 版本之间来回运行相同的项目。为此,您可以在其他端口(例如8056)上设置较旧的PHP版本,因此当您转到时,xampp将运行PHP 7,当您转到xampp时,将运行PHP 5.6。http://localhost/any_project/http://localhost:8056/any_project/

  3. 在虚拟主机上运行较旧的 PHP 版本:您可以创建像localhost56这样的虚拟主机来运行PHP 5.6,同时您可以在localhost上使用PHP 7。

让我们设置它

第 1 步:下载 PHP

所以你有PHP 7在xampp下运行,你想添加一个较旧的PHP版本(比如PHP 5.6)。从 php.net 下载 PHP zip 存档的 nts(非线程安全)版本(有关旧版本,请参阅存档),然后提取 下的文件。线程安全版本不包括 php-cgi.exe。c:\xampp\php56

第 2 步:配置php.ini

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

extension_dir = "ext"

此外,如果Apache配置中存在以下行httpd-xampp.conf

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

用前导 #(哈希字符)注释掉它。

第 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 中运行的目录。只需在配置文件底部添加以下内容(从步骤3开始)即可设置目录。httpd-xampp.conf

<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 版本]

现在要在端口 8056 上设置 PHP v5.6,请将以下代码添加到配置文件的底部(从步骤 3 开始)。httpd-xampp.conf

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 添加到主机文件中(了解如何操作),然后将以下代码添加到配置文件的底部(从步骤 3 开始)。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)。

xampp control panel showing apache running with configured ports


答案 2

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

c:\php5\

c:\php7\

您需要做的就是告诉您的Web服务器(Apache)要使用哪个版本的PHP,您可以通过加载相应的模块来执行此操作。在 Apache 中,您可以通过查找文件然后编辑相应的行来执行此操作:httpd.conf

LoadModule php7_module c:\php7\libphp7.so

当然,您必须找出正确的路径 - 这仅用于说明。

保存并重新启动服务器。请注意,如果不重新启动它,更改将不会生效。httpd.conf

没有GUI开关可以做到这一点,你需要编辑文件,然后重新启动Apache。这样做只需要几秒钟,您甚至可以注释掉一个版本,因此“切换”只需要几次击键,例如.conf

使用 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安装。

编辑1-十一月-2017:显然,有些人说Windows上没有文件。我给出的答案是根据我在Mac上设置内容的方式改编的(Mac确实使用文件而不是)。然而,答案的原理仍然完全正确。您正在使用 Apache 的配置文件来指定 PHP 模块 ( 或 ) 在系统上的位置。因此,Windows的唯一区别是文件名和/或路径位置。我给出的答案对于Apache / PHP的普通安装也是正确的(根本没有XAMPP)。.so.so.dllhttpd.conf.so.dll


推荐