Windows 10 PHP开发环境配置:IIS7 + PHP + MySQL

发布于 2019年10月07日 08:39:25 - 技术分享 - PHP - 环境配置

Windows 10 PHP开发环境配置:IIS7 + PHP + MySQL

配置需求

系统环境 Windows 10
IIS版本 7.0
PHP版本 7.0.6
MySQL版本 5.7.12

配置步骤

第一步:安装及配置IIS

注意:

即使在Windows平台下,使用命令行操作系统仍然是最快捷的方式,文中部分操作也会建议命令行操作,如需了解更多其他方式操作请自行百度。

1.在【控制面板】中选装IIS部件

同时按下键盘【Win+R】,弹出运行窗口,输入control,回车,直接进入控制面板目录。

打开【程序和功能】-【启用或关闭 Windows 功能】。

勾选【Internet Infomation Services】启用默认功能,再增选【HTTP 重定向】和【CGI】。

【确定】后,等待安装完成。

打开浏览器,输入http://localhsot,显示IIS欢迎页面,安装成功。

 

 

 

知识点:为什么选择FastCGI

  1. CGI(通用网关接口/Common Gateway Interface)是可执行程序,和WEB服务器各自占据着不同的进程,一个CGI程序只能处理一个用户请求;当用户请求数量非常多时,会大量占用系统的资源,如内存、CPU时间等,造成效能低下。
  2. ISAPI(Internet Server Application Program Interface)是微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI应用大多数以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的 用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中,效率要显著高于CGI,这种方式最大的缺点就是稳定性不好,当PHP出错的时候,Apache进程也跟着死掉。
  3. FastCGI 是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能;传统的CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。
FastCGI 模式运行 PHP 优点:
  • FastCGI 模式运行 PHP 出错不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。
  • FastCGI 模式运行 PHP 比 ISAPI 模式性能更好。
  • FastCGI 模式可以兼容 PHP 全版本(ISAPI 不再兼容 PHP 5.6 以上版本)。
  • FastCGI 开发组件已经被微软做为组件写进IIS 7.x及之后的版本,选择【CGI】会自动安装【FastCGI】。
FastCGI 模式的一些缺点:
  • FastCGI 模式更适合生产环境的服务器,但对于开发用机器来说就不太合适,因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。

综上所述,目前 Windows 环境下,FastCGI 是最适合 PHP 的开发环境。

2.新建网站目录

运行->inetmgr

右击”网站=>添加网站“

添加网站信息,一定按图片所示设置,除了路径自选

弹出”80端口占用“,意味着你将会有另一个网站【Default Web Site】同时占用80端口,解决办法:

  1. 点击取消,返回修改端口,重新确定。
  2. 点击确定,每次使用时,关闭其中一个网站

第二步:安装 PHP

下载地址:http://windows.php.net/download/
官网可以下载到Windows版的最新PHP包,但是PHP.net已经放弃5.6版以前的环境包,大叔这里整理了一份以前的环境包列表,有需要的同学可以自己去拿

百度云盘:https://pan.baidu.com/s/1BJgFhrCHRBj1VFkgGegZ8g
访问密码:11mh

将PHP环境包解压后,找到php.ini-xxx文件

既然是本地开发测试,大叔建议:复制”php.ini-development“ 并粘贴,重命名为php.ini

php.ini-development
php.ini-dist
5.5版以后名称
5.5版以前名称
拥有较低的安全性设定,对权限设置适合开发程式使用
php.ini-production
php.ini-recommended
5.5版以后名称
5.5版以前名称
拥有较高的安全性设定,则适合正式上线的服务器中使用

配置 php.ini

1.设置extension_dir插件

搜索并找到extension_dir = "",在""里面输入PHP插件ext目录所在的位置,extension_dir = "C:/ProgramFiles/XXX/XXX/php目录名/ext"

搜索并找到extension_dir=,会找到插件目录列表,大叔建议打开以下插件(去掉前面”;“)维持大部分的PHP网站功能,如果有其他需求再打开其他插件(注:配置一次PHP.ini就需要重启一次IIS

插件名 插件功能
extension=php_bz2.dll 压缩插件
extension=php_curl.dll 远程粘贴
extension=php_gd2.dll GD库
extension=php_mbstring.dll 短标签
extension=php_mysql.dll MySQL老引擎
extension=php_mysqli.dll MySQL新引擎
extension=php_pdo_mysql.dll MySQLPDO连接

2.设置时区:date.timezone = Asia/Shanghai

3.IIS 添加 PHP 支持

运行->inetmgr

打开:处理程序映射

打开:添加模块映射

填写如下内容

确定会有提示,点击”确定“

映射程序添加成功,列表中会有一条PHP程序映射记录

这样一个IIS+PHP环境就搭建好了。

PHP包:版本/型号区别

  • 5.5版本之前
    Windows配置IIS+PHP,需要安装VC9
    Windows配置Apache+PHP,需要安装VC6
  • 5.5版本之后只有VCXX了,只要选线程方式和32位/64位系统就可以了
    Non Thread Safe是指非线程安全,Thread Safe则是指线程安全
    使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本
    使用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率

FastCGI 进程错误汇总

错误1:php-cgi.exe - FastCGI 进程意外退出

打开http://localhost页面,提示以上错误,95%以上就是环境对应的VC版本没装对。

你需要寻找PHP VC号对应的Visual C++ Redistributable for Visual Studio开发版本:

VC号 VS对应版本号
VC6 VC6.0
VC7 VS2002
VC7.1 VS2003
VC8 VS2005
VC9 VS2008
VC10 VS2010
VC11 VS2012
VC12 VS2013
VC13 VS2014
VC14 VS2015

5.5版本需要安装 VS2012
5.7版本需要安装 VS2015

错误2:发生未知 FastCGI 错误错误代码为0x8007010b

如果之前的安装严格按照本文所述,那应该考虑权限问题,是否把PHP、Apache、MySQL程序放置在了C盘的严控权限位置(比如桌面)。

将程序文件夹添加人员【Everyone】,权限为【所有】,重新刷新页面即可。

第三步:安装 MySQL

下载地址:https://dev.mysql.com/downloads/mysql/

百度云盘:https://pan.baidu.com/s/19ffxCVYgTUbmMzNwI8CB6g
访问密码:l5fb

大叔建议使用免安装版,使用CMD方式安装,是最容易熟悉MySQL的方法,本文的安装流程是以绿色版为标准。
百度网盘是本文配套的MySQL 5.7 官方免安装版

进入官网下载页面,拖至最下面,或在页面搜索 Other Downloads:

32位系统下载:Windows (x86, 32-bit), ZIP Archive
64位系统下载:Windows (x86, 64-bit), ZIP Archive

配置 my.ini

my.ini】是MySQL安装使用的核心文件,安装与使用都需要靠他来引导。

将文件下载后解压,复制 my--default.ini 复制并重命名为 my.ini(新版的好像都不再带 my--default.ini,所以自己在根目录下建一个 my.ini

1.设置MySQL安装路径

my.ini 中,一定要存在下面的字符,如果不存在,就自己码进去,然后保存

[mysqld]
#skip-grant-tables #这名加上可以跳过验证
basedir= C:/User/Administrator/XXX/XXX/mysql-noinstall-5.1.53-win32 #根目录
#datadir=C:/User/Administrator/XXX/XXX/mysql-noinstall-5.1.53-win32/data #数据文件存放目录
2.人工安装 MySQL

打开CMD控制台

通过CMDcd  命令,进入MySQL的根目录下的bin文件夹

bin文件夹下分别输入下面三条指令:

mysqld --install MySQL  回车(成功会提示,S开头字母)
mysqld -remove          回车(如果安装位置出错,就用这个命令删除配置,然后重新安装。)
net start mysql         回车(成功会提示服务已经运行)

如果安装成功,就可以通过CMD命令,轻松开启/关闭MySQL

注意:保存【my.ini】时编码一定设为Ansi,否则会报如下错误

error: Found option without preceding group in config file: D:\Program Files\mysql-5.6.25-winx64\my.ini at line: 1
Fatal error in defaults handling. Program aborted。

这时,你在CMD中运行net start mysql命令,恭喜,你进入了MySQL的的卡死循环状态中。

错误提示解决方案汇总

1.服务无法启动
  1. C:XXX>mysql>bin>net start mysql
  2. MySQL 服务正在启动 ....
  3. MySQL 服务无法启动。
  4. 服务没有报告任何错误。
    请键入 NET HELPMSG 3534 以获得更多的帮助。

解决方案:【MySQL】服务无法启动,服务没有报告任何错误的解决办法

2.新安装MySQL,Root空密码无法登录
MySQL> mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

解决方案:【MySQL】免安装版安装并启动成功后,无法登录,root帐户密码强制重设

第四步:设置伪静态

1.下载 IIS 7 的 Microsoft URL 重写模块 2.0 模板

官网64位:http://www.microsoft.com/zh-cn/download/details.aspx?id=7435
官网32位:http://www.microsoft.com/zh-cn/download/details.aspx?id=5747
IIS URL Rewrite下载地址:http://www.iis.net/download/URLRewrite

2.设置web.config

<rewrite>
<rules>
<rule name="Rewrite to index.php" stopProcessing="true">
<match url="^index.html" />
<action type="Rewrite" url="index.php" />
</rule>
<rule name="Rewrite to article.php" stopProcessing="true">
<match url="^article_(d+).html" />
<action type="Rewrite" url="article.php?id={R:1}" />
</rule>
<rule name="Rewrite to list.php" stopProcessing="true">
<match url="^list_(d+)_(d+).html" />
<action type="Rewrite" url="list.php?id={R:1}&page={R:2}" />
</rule>
<rule name="Rewrite to category.php" stopProcessing="true">
<match url="^(.*)" />
<action type="Rewrite" url="category.php?category={R:1}" />
</rule>
</rules>
</rewrite>​

其他问题

问题1:File upload error - unable to create a temporary file in Unknown on line 0

原因:因为PHP的临时目录为不可读写

解决方案:

  1. 打开 php.ini 找到 upload_tmp_dir
  2. 找一个位置为php上传临时目录,然后 upload_tmp_dir = "D://upload/"
问题2:PHP Notice:  Undefined variable

原因:PHP默认的配置会报这个错误,虽然有利于发现错误,但同时实践中会出现很多问题。

解决方法:

方法1:修改 php.ini 配置文件 error_reporting 设置:

  1. 找到 error_reporting = E_ALL
  2. 修改为 error_reporting = E_ALL & ~E_NOTICE

原理:减弱PHP的敏感程度,使其遇到这种问题不报错。(不推荐这种方式,会导致你错误的语法继续出错)

方法2在PHP文件头部加入以下代码

ini_set("error_reporting","E_ALL & ~E_NOTICE");

同样也可以解决问题,但同样不推荐,这个方法。

方法3:修正你的语法,让你的代码更规范!!!


附录

Windows 2008 R2 IIS角色安装方法

Windows 2008 R2是服务器版本,所以安装IIS7时和非服务器版有些不同,需要使用角色系统安装

第一步:安装IIS

首先进入”控制面板=>打开或关闭Windows功能“

服务器版本进入的是服务器管理器,我们需要进入【角色】并添加角色来增加IIS功能

进入引导页,点击”下一步“

打勾”Web 服务器(IIS)“,点击下一步

一路下一步,记得把 CGI 勾选上,不要勾选 ISAPI

等待安装过程

最后显示”安装成功 “,即大功告成。

Windows 10:MySQL my.ini 与 Windows7 不通用

Windows 7/8/10/2008R2 都使用了IIS7,使用及安装的方法几乎一致,但因为微软的老毛病,系统不同的情况下,Bug也会不同,这里大叔记录了一些安装其他系统时遇到一些情况记录。

MySQL的 my.ini 文件,各个系统之间不能通用,所以在安装时,无法直接把Windows7的MySQL直接移植过去,大叔就重写了 my.ini 就可以正常使用了。

[WinMySQLAdmin]
Server="C:/Users/Administrator/***/***/***/mysql-5.7.16/bin/mysqld.exe"
[client] 
no-beep 
# pipe 
# socket=mysql 
port=3306
[mysql]
default-character-set=utf8 

# For advice on how to change settings please see 
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html 
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the 
# *** default location during install, and will be replaced if you 
# *** upgrade to a newer version of MySQL. 
[mysqld] 
explicit_defaults_for_timestamp = TRUE

# Remove leading # and set to the amount of RAM for the most important data 
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. 
innodb_buffer_pool_size = 2G 

# Remove leading # to turn on a very important data integrity option: logging 
# changes to the binary log between backups. 
# log_bin 

# These are commonly set, remove the # and set as required. 

#basedir="C:\mysql-5.7.11-win32\" 
basedir = "C:\Users\Administrator\***\***\***\mysql-5.7.16\"
#datadir="C:\mysql-5.7.11-win32\data\" 
datadir = "C:\Users\Administrator\***\***\***\mysql-5.7.16\data\"

port=3306
server_id=1

general-log=0
general_log_file="mysql_general.log"
slow-query-log=1
slow_query_log_file="mysql_slow_query.log"
long_query_time=10
log-error="mysql_error_log.err"
default-storage-engine=INNODB 
max_connections=1024
query_cache_size=128M 
key_buffer_size=128M 
innodb_flush_log_at_trx_commit=1
innodb_thread_concurrency=128
innodb_autoextend_increment=128M 
tmp_table_size=128M 

# Remove leading # to set options mainly useful for reporting servers. 
# The server defaults are faster for transactions and fast SELECTs. 
# Adjust sizes as needed, experiment to find the optimal values. 
# join_buffer_size = 128M 
# sort_buffer_size = 2M 
# read_rnd_buffer_size = 2M 

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8 
innodb_flush_method=normal

感谢:

https://www.jianshu.com/p/ed1be12030a9

https://blog.csdn.net/qq_41993206/article/details/81357578

https://www.cnblogs.com/huangye-dream/p/3560722.html

网盘地址 密码:sc0w

解压密码:http://xdy.me | www.xdy.me

本站所有软件仅供学习使用,请在24小时内删除,本站不承担任何相关责任!

转载声明:本站文章无特别说明,皆为原创,版权所有,转载请注明:Dy大叔的日常

转载自 Windows 10 PHP开发环境配置:IIS7 + PHP + MySQL | XDY.ME@Dy大叔的日常

XDY.ME@Dy大叔的日常