我们正在使用XAMPP和PHP 7.0,因为我们的新产品需要PHP 7。
但是,有些旧项目使用了像mysql_connect
等函数,这些在PHP 7.0中已经被删除。
那么,在XAMPP中是否有一种简单的方法可以更改PHP版本?
注意:请不要建议将旧项目升级以与新版本兼容,因为我无法做出此类开发人员不得作为决策的决定(只是一名员工)。
只需使用一个xampp安装即可选择以下4种选项:
仅为旧项目目录运行较旧的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,同时您可以在localhost上使用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"
如果在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>
Note: 如果您需要,可以按照步骤1到3添加更多版本的PHP到您的Xampp安装中。
Step 4 (option 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]
现在要将 PHP v5.6 设置到端口 8056 上,请在配置文件底部 (httpd-xampp.conf
,来自步骤 3) 添加以下代码。
Listen 8056
<VirtualHost *:8056>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php56-cgi
</FilesMatch>
</VirtualHost>
第四步(选项3):[在虚拟主机上运行旧版本的PHP]
为了在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)。
SetEnv PHPRC
的代码,我无法将其注释掉,但我仍然遇到了那个错误。:( - BrettError message: End of script output before headers: php-cgi.exe
。 - Nomanc:\php5\
c:\php7\
您只需要告诉您的Web服务器(Apache)使用哪个版本的PHP,方法是加载适当的模块。在Apache中,您可以通过找到文件httpd.conf
并编辑相应的行来实现此目的:
LoadModule php7_module c:\php7\libphp7.so
当然,您必须找出正确的路径-这仅供说明。httpd.conf
并重新启动服务器。请注意,如果您不重新启动它,则更改将不会生效。.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版本,也不需要双重启动或使用另一台机器,或者任何其他“解决方案”,这些方案都提出了复杂的变通方法。原帖作者想要使用XAMPP并告诉它要使用哪个版本的PHP。这是最快捷、最有效的方法,只需要一个XAMPP安装即可。
编辑-2017年11月1日: 显然有人说在Windows上没有.so
文件。我所给出的答案是从我在我的Mac上设置的方式调整的(它使用.so
文件而不是.dll
)。但是,答案的原则仍然完全正确。您正在使用Apache的配置文件httpd.conf
来指定PHP模块(.so
或.dll
)在您的系统上的位置。因此,在Windows上唯一的区别可能是文件名和/或路径位置。我所给出的答案对于纯净的Apache/PHP安装(完全没有XAMPP)也是正确的。
httpd/conf
中找不到类似于“LoadModule php7_module c:\php7\libphp7.so”的行。 - I am the Most Stupid Person我建议使用Docker,这样可以将环境拆分为各种组件,并随时混合和匹配所需的组件。
Docker将允许您运行一个带有MySQL的容器,另一个带有PHP的容器。由于它们是单独的镜像,因此您可以拥有两个容器,一个是PHP 5,另一个是PHP 7,您可以启动任何一个并且端口80可以映射到两个容器。
https://hub.docker.com上有各种预配置的镜像,您可以轻松安装和运行。
我还添加了portainer作为一个镜像,它允许您从docker镜像中管理各个方面 - (我在启动时启动了该容器,以便节省使用命令行的时间)。它不能为您做所有事情,有时从命令行配置和启动镜像更容易,但一旦设置好,您就可以通过Web界面启动和停止它们。
也可以同时运行两个容器并将不同的端口映射到每个端口。因此,端口80可以映射到PHP 5,端口81可以映射到PHP 7(如果您在2017年观看此视频,则映射到PHP 8.1)。
有各种教程介绍如何安装Docker(https://docs.docker.com/engine/installation/)以及其他类似的'how to'内容。尝试http://www.masterzendframework.com/docker-development-environment/获取开发环境配置信息。
就是这么简单。
Uniform Server是Windows下的免费轻量级WAMP服务器解决方案。小于24MB,模块化设计,包括最新版本的Apache2、Perl5、PHP(可在PHP53、PHP54、PHP55或PHP56之间切换)、MySQL5或MariaDB5、phpMyAdmin或Adminer4。无需安装!没有注册表残留!只需解压并启动!
它甚至可以运行在闪存驱动器上。具有cron仿真、支持perl、mariaDB、几个版本的Mysql、filezilla服务器和其他一些功能。
可以的。我假设你已经安装了xampp。
这就是我如何使用多个xampp的方法
除非一定需要使用XAMPP,否则你可以尝试使用WAMP获得你所需的功能。WAMP本质上与XAMPP类似,只是打包方式不同。
安装完成后,您可以在此处轻松切换php版本:
您可以安装尽可能多的PHP版本。
以下是详细步骤。
请访问此网址:WAMP下载
然后选择您要使用的基本服务器,例如带有php7的最新版本。
安装完WAMP 3后,转到附加组件文件夹并选择您需要的php版本(或版本)。他们提供从php 5.3.29开始的各种php版本,应该可以使用mysql_connect。
要安装插件,请在安装过程中(双击exe文件)指向您安装WAMP 3的文件夹。
然后,您可以使用其他文件夹的内容,例如应用程序等来添加更多功能。
所有内容都已接口化,因此您可以专注于编码而不是破解环境。
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虚拟主机配置示例:
<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。
在命令提示符窗口(cmd.exe)中运行此命令。
set PATH=C:\xampp\php;%PATH%
根据您安装php 7的位置进行更改。
mysql_
命令存在 SQL 注入的风险。请改用 PDO 或mysqli_
。更多信息请参见 https://www.sitepoint.com/migrate-from-the-mysql-extension-to-pdo/。 - gthuo