前传

工作需要,我需要切换两种php版本,分别是php5.3.29和php7.1.16,环境是win7+apache2.2+php+mysql。
本来我使用的方法是在本地装两个php,然后在同一个目录里安装,定义两个名字,每次换版本的时候需要先把相关进程结束,然后把当前需要的php版本的目录名字改成配置文件里配置的目录名字,我这么说读两遍大概能明白我意思,比较麻烦,还要倒腾目录名字,所以打算用phpstudy。

20170707更新:
发现php官网中没有7.1.6的下载链接了,需要去档案目录中下载。其实可以直接用新的php稳定版,当前最新的php7稳定版版本为7.1.7。

phpstudy

当前时间:2017-06-22
当前最新版本的phpstyudy:phpStudy 2016.11.03 再次更新,支持自定义php版本,下载地址:phpStudy20161103.zip

安装过程略过,下一步就好了。 请不要无脑下一步,请看下面的更新。

2017/6/26更新:
请认真确认安装phpstudy的目录是否为空,phpstudy没有卸载程序,如果安装到已经有程序的目录中,可能会导致覆盖文件!!!

安装完会得到这样的目录和程序界面:
QQ截图20170622100021.jpg

现在我们得到的是:
PHP:(php的版本如图所示)
IIS:(并未内置,需要系统自助安装)
Apache:Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9
Nginx:nginx/1.11.5
Mysql:Server version: 5.5.53 MySQL Community Server (GPL)
还有一些其他附加工具

本机原始数据库

需要注意的是mysql数据库,如果之前自己本机有mysql数据库并且有使用,那么现在我们有两个方案,使用原来的数据库或者使用当前的数据库。
不管使用哪个数据库都需要修改mysql的默认端口,可以去phpstudy的目录寻找mysql的配置文件,或者在phpstudy菜单中找到mysql.ini的快捷方式打开。可以修改任意一个mysql的端口,当端口修改,两个mysql就共存了。

我选择的是使用phpstudy的mysql,修改端口在navicate中使用数据传输把有用的数据传到phpstudy的mysql,然后去控制面板找到原来的mysql并删除掉。

C:\phpStudy\MySQL\my.ini:

#  power by phpStudy  2014  www.phpStudy.net  官网下载最新版

[client]
port=3306
[mysql]
default-character-set=utf8

[mysqld]
port=3306 #修改这个地方再重启就可以修改端口
basedir="C:/phpStudy/MySQL/"
datadir="C:/phpStudy/MySQL/data/"
character-set-server=utf8
default-storage-engine=MyISAM
#支持 INNODB 引擎模式。修改为 default-storage-engine=INNODB 即可。
#如果 INNODB 模式如果不能启动,删除data目录下ib开头的日志文件重新启动。

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=512

query_cache_size=0
table_cache=256
tmp_table_size=18M

thread_cache_size=8
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K

innodb_additional_mem_pool_size=2M

innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M

innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8

添加指定php版本

这里我需要的是php7.1.6 stable,所以首先下载这个版本。
官网地址:php-7.1.6-nts-Win32-VC14-x64.zip

查找资料发现,2014年的phpstudy有一个叫做“私人订制”的功能可以自定义php版本,但是在当前版本没找到这个功能。
在phpstudy目录使用文本搜索,没找到配置php版本的配置文件,尝试在php目录中修改php文件夹的名字,发现程序中的版本也发生变化。

QQ截图20170622103955.jpg

那就是说他是直接读目录来确定版本的。这里我写了个不存在的版本7.3.12,重启程序之后他识别成我写的目录名字,说明把新下载的放进去就行了。我这里的目录为C:\phpStudy\php

  1. 将php压缩包解压到上面写的目录,然后可以改个名字也可以不改。
  2. 去php7.0.12里复制一下php.ini,放到新解压缩的目录里,因为我之前有配置xdebug,所以就直接拷过去。
  3. 在php.ini中进行一些修改,把ext目录的配置项修改成extension_dir="./ext",因为原来的配置写的是绝对路径,是一定会乱套的。绝对路径都改成当前目录,或者删掉。
  4. 重启phpstudy,切换到新的php版本,查看phpinfo(),效果如下。

QQ截图20170622104740.jpg

一些其他情况

写本文的时候本来打算看看nginx服务器的版本,发现他本身的nginx和本身的php7并不能适配,phpinfo()页面卡着不出来,目录是可以列出来的,不知道是我配置的不对还是什么其他情况,他自带的php7是x86架构的。我安装的是x64的,使用新安装的php7.1.16就可以和他原本的nginx适配。

由于原本的php7为x86而我下载的是x64,所以x86的扩展不能copy过来需要自己下载,当然也可以安装x86版本的php,去附录的地址找就行了。


2017-06-23更新
写一下遇到的情况,首先是php7.1.16需要vc14的支持,下载地址vc_redist.x64.exe

情况1:
切换到7.1.16之后,进入phpinfo();页面的时候,会弹出一个警告框,其实不仅限于phpinfo页面,是打开的第一个php页面,会提醒找不到php7ts.dll,再次进入的时候就没有问题了,现在已经完全没有问题了,忘记是修改了哪里,php7ts.dll按说是不应该属于nts的结构里面的,具体为什么会出现暂时不清楚。

情况2:
我把php7.1.16的各种版本中的所有版本都下载下来了,发现了其中的区别。
只有线程安全版本的php里面才有php7ts.dll,除了这个文件还有一个php7apache2_4.dll
根据网上的一些“文章”,把php目录添加到环境变量可以解决一些问题,我尝试的情况为,不添加任何插件,切换到php-7.1.6-Win32-VC14-x86版本可以运行php,服务正常,切换到x64版本,就不正常了,apache启动不起来,估计是需要加载php目录中的php7apache2_4.dll,可以尝试参考文章php7+apache2.4 (Windows7下),成功启动

情况3:
缺少的pdo_mysqli和ssl等组件需要自行安装。

情况4:
上面的情况1我找到了一个复现方法,我在nts-x64的php.ini中将xdebug的配置项按照如下修改,将zend_删掉,就会出现那个错误弹框。

extension="./ext/php_xdebug-2.5.5-7.1-vc14-x86_64.dll"
; zend_extension="./ext/php_xdebug-2.5.5-7.1-vc14-x86_64.dll"

QQ截图20170623142117.jpg

我发誓我运行的是nts的php,报错原因暂时不清楚。

附录

xdebug各版本下载地址
php7.1.6的各种版本
phpStudy20161103.zip

最后修改:2021 年 01 月 12 日
如果觉得我的文章对你有用,请随意赞赏