前传
工作需要,我需要切换两种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没有卸载程序,如果安装到已经有程序的目录中,可能会导致覆盖文件!!!
安装完会得到这样的目录和程序界面:
现在我们得到的是:
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文件夹的名字,发现程序中的版本也发生变化。
那就是说他是直接读目录来确定版本的。这里我写了个不存在的版本7.3.12,重启程序之后他识别成我写的目录名字,说明把新下载的放进去就行了。我这里的目录为C:\phpStudy\php
。
- 将php压缩包解压到上面写的目录,然后可以改个名字也可以不改。
- 去php7.0.12里复制一下php.ini,放到新解压缩的目录里,因为我之前有配置xdebug,所以就直接拷过去。
- 在php.ini中进行一些修改,把ext目录的配置项修改成
extension_dir="./ext"
,因为原来的配置写的是绝对路径,是一定会乱套的。绝对路径都改成当前目录,或者删掉。 - 重启phpstudy,切换到新的php版本,查看phpinfo(),效果如下。
一些其他情况
写本文的时候本来打算看看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"
我发誓我运行的是nts的php,报错原因暂时不清楚。