我们将XAMPP与PHP 7.0一起运行,因为我们的新产品需要PHP 7。
但是有些旧项目使用的功能,例如mysql_connect
等等。在PHP 7.0中已将其删除。
因此,有没有一种方法可以轻松地在XAMPP中更改PHP版本?
注意:请不要建议将旧项目升级为与新版本兼容,因为我无法以开发人员(只是员工)的身份做出决定,因此无法执行此操作。
我们将XAMPP与PHP 7.0一起运行,因为我们的新产品需要PHP 7。
但是有些旧项目使用的功能,例如mysql_connect
等等。在PHP 7.0中已将其删除。
因此,有没有一种方法可以轻松地在XAMPP中更改PHP版本?
注意:请不要建议将旧项目升级为与新版本兼容,因为我无法以开发人员(只是员工)的身份做出决定,因此无法执行此操作。
Answers:
当您可以通过一次xampp安装同时使用多个 PHP版本时,为什么还要在PHP版本之间切换?通过单个xampp安装,您有2个选项:
仅对旧项目的目录运行较旧的PHP版本: 大多数情况下,这将达到目的,您可能打算使用较旧的PHP版本运行一个或两个旧项目。只需将xampp配置为仅针对那些项目目录运行较早的PHP版本。
在xampp的单独端口上运行旧版本的PHP:有时,当您需要在新旧版本的PHP上来回运行同一项目时,可能会将旧项目升级到最新的PHP版本。然后,您可以在其他端口(例如8056)上设置较旧的PHP版本,以便当您转到http://localhost/any_project/
xampp时运行PHP 7,而转到http://localhost:8056/any_project/
xampp时运行PHP 5.6。
在虚拟主机上运行较旧的PHP版本:您可以创建一个虚拟主机(如localhost56)来运行PHP 5.6,而可以在本地主机上使用PHP 7。
让我们进行设置。
步骤1:下载PHP
因此,您有在xampp下运行的PHP 7,您想为其添加一个较旧的PHP版本,例如PHP 5.6。从php.net下载nts(非线程安全)版本的PHP zip存档(请参阅旧版本的存档),然后将文件解压缩到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的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将更多版本的PHP添加到xampp安装中。
步骤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文件(请参阅参考资料),然后添加以下代码到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)。
错误更新:
脚本'php-cgi.exe'格式的标头:错误的标头
如果遇到上述错误,请httpd-xampp.conf
再次打开并用引号#(哈希字符)注释掉以下行。
SetEnv PHPRC "\\path\\to\\xampp\\php"
php somefile.php
吗,没有任何错误?
SetEnv PHPRC
因此我无法将其注释掉,但仍然出现该错误。:(
Error message: End of script output before headers: php-cgi.exe
您可以下载所需的任何版本的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
使用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
)改编而成的。但是,答案的原理仍然完全正确。您正在使用Apache的配置文件,httpd.conf
指定其中的PHP模块(.so
或.dll
)位于您的系统上。因此,Windows的唯一区别是文件名和/或路径位置。对于简单安装的Apache / PHP(完全没有XAMPP),我给出的答案也是正确的。
我建议使用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/进行开发环境配置。
我使用Uniserver。
它具有内置的此功能。
就这么简单。
Uniform Server是Windows的免费轻量级WAMP服务器解决方案。不到24MB的模块化设计,包括Apache2,Perl5,PHP(在PHP53,PHP54,PHP55或PHP56之间切换),MySQL5或MariaDB5,phpMyAdmin或Adminer4的最新版本。无需安装!没有注册表灰尘!只需打开包装并开火!
它甚至可以在闪存驱动器上运行。具有cron仿真功能,支持perl,mariaDB,Mysql的几个版本,filezilla服务器以及其他一些功能。
您可以有两个不同版本的XAMPP。
我正在做一个有十年历史的项目。因此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版本。他们提供了从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
并用新版本httpd-xampp.conf.7.1
替换所有对php
目录的引用php-X.X
。每个文件至少要进行10个更改。
现在,您需要编辑两个版本的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版本。
在命令提示符窗口(cmd.exe)中运行此命令。
set PATH=C:\xampp\php;%PATH%
根据您将php 7安装在何处进行更改。
请遵循以下简单步骤。我目前在PHP 7.2上运行XAMPP,但需要PHP 5.6才能在旧项目上工作
第1步
在https://windows.php.net/download上下载PHP的Thread Safe版本
将文件放在您的[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”
步骤6
启动Apache
步骤7
在Windows上编辑PHP环境变量路径
也许有点晚,但是我正在使用批处理重命名PHP文件夹(我几年前发现的phpswitch的稍微修改的版本)。
您将不同的文件夹复制到XAMPP安装中。每个PHP文件夹(活动文件夹除外)都将版本号作为后缀(例如php_5.6.32)。在所有 PHP文件夹中,将创建一个文件(PHP_VERSION),该文件仅包含相应的版本号,因此脚本可以获取此信息。但这已在自述文件中进行了描述。
从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);
我需要做同样的事情,所以我用谷歌搜索了如何并导致堆栈溢出,其中OP存在相同的问题...所以我的发现..我尝试从各个不同的方向重命名文件,我的结论基本上是把我带了太长。我最终只是从这里安装版本7:
https://www.apachefriends.org/index.html (杀死服务并尝试退出xampp)
当被问到将目录名称放在何处时,应这样(给它一个不同的名称):
和
DONEZO!现在,只需确保取消服务并退出,然后再来回交换,即可使用2个无菌XAMPP env。
万岁!现在我可以上班了!
我知道这是旧文章,但我想分享一个在PHP 7中仍在运行mysql_connect()的库。它通过重写实际函数来工作(在该库上工作的mysqli_connect()覆盖了mysql_connect())。
我从这部影片中找到https://www.youtube.com/watch?v=Eqd-jJu4sQ4
希望它会有所帮助