Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在XAMPP中使用两个PHP版本?_Php_Xampp - Fatal编程技术网

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

有没有办法在XAMPP中使用两个PHP版本?,php,xampp,Php,Xampp,我们使用PHP7.0运行XAMPP,因为我们的新产品需要PHP7 但也有一些旧项目使用了诸如mysql\u connect等函数。这些函数在PHP7.0中被删除 那么,有没有一种方法可以轻松地在XAMPP中更改PHP版本 注意:请不要建议将旧项目升级到与新版本兼容的版本,因为我无法这样做 作为一名开发人员(仅仅是一名员工),我无法做出决定 您可以像我一样安装两个不同的XAMPP:(第一个是php7,第二个是php5) 如果您不想这样做,我建议您使用wamp并更改如图所示的版本。您可以下载所需的

我们使用PHP7.0运行XAMPP,因为我们的新产品需要PHP7

但也有一些旧项目使用了诸如
mysql\u connect
等函数。这些函数在PHP7.0中被删除

那么,有没有一种方法可以轻松地在XAMPP中更改PHP版本

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

您可以像我一样安装两个不同的XAMPP:(第一个是php7,第二个是php5)


如果您不想这样做,我建议您使用wamp并更改如图所示的版本。

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

c:\php5\

c:\php7\

您所需要做的就是告诉web服务器(Apache)要使用哪个版本的PHP,您可以通过加载适当的模块来做到这一点。在Apache中,您可以通过查找文件
httpd.conf
然后编辑适当的行来完成此操作:

LoadModule php7\u模块c:\php7\libphp7.so

当然,你必须找出正确的路径——这只是为了举例说明

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

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

使用PHP5:

使用PHP7:

您不需要多个版本的XAMPP,也不需要双重启动,也不需要使用不同的机器,或者任何其他建议复杂解决方法的“解决方案”。OP希望使用XAMPP并告诉它使用哪个版本的PHP。这是最快、最有效的方法,只需要安装一个XAMPP


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

您可以有两个不同版本的XAMPP

  • 从下载这些文件并安装到您选择的目录中,例如C:\5.6.31\xampp和C:\7.1.18\xampp中
  • 每次安装后,转到已安装目录(例如C:\5.6.31\xampp,C:\7.1.18\xampp)并启动“setup\u 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控制面板

我建议使用Docker,这允许您将环境拆分为各种组件,并随时混合和匹配所需的组件

Docker将允许您使用MySQL运行一个容器,使用PHP运行另一个容器。因为它们是独立的图像,所以您可以有两个容器,一个是PHP5,另一个是PHP7,您可以启动所需的容器,端口80可以映射到这两个容器

具有广泛的预配置映像,您可以轻松安装和运行这些映像

我还添加了一个映像,它允许您从docker映像中管理docker设置的各个方面(我在启动时启动了这个容器,以避免使用命令行)。它并不是为您做所有的事情,有时从命令行第一次配置和启动映像会更容易,但一旦设置完成,您就可以通过web界面启动和停止映像

还可以同时运行两个容器,并将单独的端口映射到每个容器。因此,端口80可以映射到PHP5和PHP81(或者PHP7,如果您在2017年观看的话)


关于如何安装Docker()和加载其他“how to”类型的内容,有各种教程。尝试开发环境配置。

您不需要在这种配置上浪费时间,只需使用:)


MAMP在界面上有一个PHP版本选择功能。

是的,您可以。我想您已经安装了xampp。所以

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

这就是我如何使用安装了多个xampp的方式

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

一旦你安装了它,你可以在两者之间切换
LoadModule php5_module c:\php5\libphp5.so
#LoadModule php7_module c:\php7\libphp7.so
#LoadModule php5_module c:\php5\libphp5.so
LoadModule php7_module c:\php7\libphp7.so
#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"
    $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);
extension_dir = "ext"
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>
<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>
Listen 8056
<VirtualHost *:8056>
    <FilesMatch "\.php$">
        SetHandler application/x-httpd-php56-cgi
    </FilesMatch>
</VirtualHost>
<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>
SetEnv PHPRC "\\path\\to\\xampp\\php"
set PATH=C:\xampp\php;%PATH%
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"
# XAMPP settings
Include "conf/extra/httpd-xampp.conf"
# XAMPP settings
Include "conf/extra/httpd-xampp5.6.conf"
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>
<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
<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>
127.0.0.1 magento2.test
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>
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