一、基础知识
我们知道php配置有几种:
1、CGI方式加载PHP环境,通常就是IIS里面配置解释器为 php.exe,早期比较常见,目前使用较少。
特点是:稳定,但效率太低。
2、ISAPI方式加载PHP环境,通常就是IIS里面配置解释器为php5isapi.dll,目前使用最多,应用最广。
特点是:多线程,效率较高,但不够稳定。
3、FastCGI方式加载PHP环境,在IIS环境里并不常见,但其它系统环境应用还是有的,不过IIS7.0开始内置FastCGI了。
特点是:高效率,高稳定性,属于将来发展趋势。
我试过其他的特别麻烦,PHP 5.3发布的Windows版已经不支持ISAPI模式了,所以我打算按微软推荐的FastCGI方式运行PHP。
我用的就第三种,也是最好最快的,因为FastCGI大大加强了IIS处理PHP的能力,能迅速提高PHP站点的反应速度和生产力,
并具有更高的稳定性和安全性.
下载地址:http://windows.php.net/download/里面有好多种,要那种呢?
PHP现在推出5.3.2版本了,不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。
首先我来解答:
VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。
那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本;
那Non Thread Safe是什么?
Non Thread Safe就是非线程安全;
Thread Safe 是什么?
Non Thread Safe 是线程安全;
FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip 套件)所以我们选择NO-Thread Safe 版本的PHP来使用。
而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。
二、安装 IIS 7.5
打开【服务器管理器】-【角色】-【添加角色】, 选择【Web服务器(IIS)】
选择角色服务,注意一定勾选【CGI】,如果你的程序在IIS7下出错,记得选择服务的时候添加IIS6兼容模块,如果无问题,这个可以不用选择;
测试是否成功安装IIS v7.0/v7.5,在浏览器输入:http://localhost/ 或者 http://127.0.0.1/
二、安装 PHP
zip 格式,php 安装。
直接解压在 C:\php 目录即可。
PHP配置
3. 配置PHP
①把下载好的ZIP文件解压到一个文件夹,比如C:\PHP,下文称之为PHP目录。
②把PHP目录下的php.ini-development改名为php.ini,并打开它。
③打开扩展目录配置extension_dir,即把 extension_dir = "ext"前的分去掉。
④打开扩展配置,我觉得php_mbstring是必须的,其它的可以自选。
⑤修改时区。date.timezone = "Asia/Shanghai"
⑥修改mbstring配置,这个根据自己的情况改,如果只是测试用的话,不改也没关系。
⑦修改好后可以运行CMD,进入PHP目录,执行php –version,如果配置不对的话,就会有警告。
修改F:\WebLAMP\php5\php.ini-development文件名为php.ini。
配置php.ini 文件,搜索如下配置并修改相应的配置值:使之支持mysql等extension_dir = "php安装目录\ext"
log_errors = On
error_log = "C:/inetpub/temp/php-errors.log"
fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0
session.save_path = "C:/inetpub/temp/phpsessions/"(可选)
以上3个前的;去掉,并修改以上相应数值,如下图所示:
去除以下扩展前的引号:
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_odbc.dll
extension=php_xmlrpc.dll
extension=php_xsl.dll
extension=php_zip.dll
输入http://127.0.0.1/或http://localhost/校验是否成功安装php:
如果按上面的教程配置好后,运行php测试页面,出现了500错误。
那就设置php.ini中的date.timezone项。
我这里设置成上海时区:date.timezone = Asia/beijing
三、整合 IIS 与 PHP
IIS 7 , 7.5 默认支持 FastCGI 方式运行 php
配置IIS和PHP的转接
①“控制面板”里点击“系统和安全”,在新的画面里点击右边下部的“管理工具”,在新窗口里点击“Internet信息服务(IIS)管理器”。
②在新打开的“Internet信息服务(IIS)管理器”中,双击“处理程序映射”,在新出现的画面的右上角点击“添加模块映射”。
③在添加模块映射画面,内容如下。请求路役:*.php;模块:FastCgiModule;可执行文件:选择PHP目录的php-cgi.exe,如C:\PHP\php-cgi.exe;名称:PHP(这个可以自己随便)。请求限制可加可不加,加的话,一般把谓词设为GET,HEAD,POST。
④确定,然后可以自己写一个PHP测试文件测试一下。代码
第一步:配置IIS 7 ,打开 Internet信息服务器(IIS)管理器, 在 IIS 添加一个处理程序映射
第二步:添加 【模块映射】
请求路径:*.php
模块:FastCgiModule
可执行文件:php安装目录\php-cgi.exe
名称:PHP via FastCGI
注意:要把php目录下的pws-php5cgi.reg文件注册运行下
第三步:配置 FastCGI
注意,这里如果是IIS7,则需要手动安装Administration Pack for IIS 7.0 ,如果是IIS7.5,则无需下载,IIS7.5已经集成此功能。
添加:PHP_FCGI_MAX_REQUESTS , value 数值10000;
第四步: 配置默认文档
添加默认文档index.php:
IIS 日志:
http://www.cnblogs.com/fish-li/p/3139366.html
四、测试 IIS 与 PHP
ok!完毕!
测试下:
新建一个.php文件,里面
phpinfo();
?>
保存!
运行,出现下面页面,说明配置成功了!
这样的方法 IIS就不用怎么配置,他都会自动配置好了!微软提供的配置更加详细 !
如果按上面的教程配置好后,运行php测试页面,出现了500错误。
那就设置php.ini中的date.timezone项。
我这里设置成上海时区:date.timezone = Asia/beijing
设置完后就一切正常了!
windows 2008 R2:
原来出现这个错误是因为PHP5.3是Visual C++ 2008 compiler (VC9)编译的,所以需要在服务器上安装Visual C++ 2008 runtime,至此,整个问题解决。
核实 php.ini 中的这几项 cgi.force_redirect=0 fastcgi.impersonate=1 fastcgi.logging=0
五、配置 KODExplorer
web explorer: http://www.freehao123.com/web-ftp/
什么是 KODExplorer: http://kalcaddle.com/index.html
KodExplorer是一款开源的基于Web的在线文件管理、代码编辑器。它提供了类windows经典用户界面,一整套在线文件管理、文件预览、编辑、上传下载、在线解压缩、音乐播放功能。让你直接在浏览器端实现web开发、源码文件预览、网站部署。同时拥有与本地操作一样方便、快捷、安全的体验。 商业版授权请联系:kalcaddle#qq.com
下载KODExplorer: http://kalcaddle.com/download.html
1.下载,解压
下载KODExplorer, 然后解压到 D:\ 根目录, 比如:D:\kodexplorer3.12。
2.在 IIS 中发布
【开始】-【管理工具】-【Internet 信息服务(IIS)管理器】 - 【右键 网站】 -【添加网站】
通过web 浏览器访问: http://localhost/
必须修改 文件系统相关的权限,才可以继续。
3.使用说明
管理员: admin/admin 普通用户:demo/demo 游客用户:guest/guest [如何使用] 下载程序,解压上传到你的服务器路径下,data目录设置777权限。访问体验超便捷的服务吧! (为确保数据安全,最好配置服务器不允许列目录) [关于上传问题] 程序没有做任何限制,如果需要上传大文件,则修改 php.ini:`upload_max_filesize = 1000M post_max_size = 1000M` [详情:http://955.cc/R2yT] 注意不能大于2g,否则可能导致php无法正常运行(不支持post)。 [关于解压缩问题] 程序不做任何限制,如若失败请设置php内存限制。memory_limit 1000M [关于解压缩乱码] linux服务器压缩,下载到windows下中文会乱码。是由于系统导致的。所以尽量不要跨系统操作。 [关于"系统错误"] 请配置php错误提示级别error_reporting; 配置php.ini或者允许error_reporting函数 [关于兼容性] 建议使用chrome firefox ie9+ 体验更完整。ie8以下基本上不做兼容处理。chrome支持文件夹拖拽上传。 [文件打开] office文件在线预览功能,服务器必须在公网(外部能访问该服务器); 内部或局域网需要使用请参考qq群共享“web office搭建”,然后配置kod程序config/config.php OFFICE_SERVER [安全提示] 为确保数据安全,请设置http服务器不允许列目录。[详情:http://955.cc/R2vw] [忘记密码] 修改data/system/member.php 密码为明文的md5值 例如将admin密码重设为admin 则修改第一行:"name":"admin","password":"21232f297a57a5a743894a0e4a801fc3" 【文件拖拽上传】除了ie8以下的大部分浏览器支持;建议使用chrome、360、猎豹、uc等 【文件夹拖拽上传】除了ie10以下、firefox大部分浏览器都支持,建议使用chrome、360、猎豹、uc等
权限控制相关
KodExplorer 是根据用户身份进行权限访问控制,而不是根据 windows 或 linux smb 共享一样, 基于文件系统权限进行控制。虽然有关系,但是着重点是不同的。
对于每一个用户,其都有私人文件夹,以及公共文件夹。
对于 【公共目录】, 是所有用户可见,都可以访问的。
对于【我的文件】,是用户自己完全控制的,但是具体的权限, 管理员admin可以进行设置。 删除用户必须要谨慎,因为删除用户会把此用户的home目录全部干掉,造成无法挽回的局面。
管理员可以进行很多设定:
主菜单设定:
用户的权限,是根据其所属的用户组而确定的。我们可以针对用户组设定如下细致的权限控制。
关于权限多说几句, 我们可以只依赖于 kodexplorer的权限管理, 我们把底层的 文件系统权限放到最大(linux 777, windows Everyone 完全控制)
【文件(夹)属性】: 查看文件夹属性,以及修改权限。
【zip压缩、zip解压】: 对于文件夹,和压缩文件,右键菜单是否有【压缩】、【解压缩选项】选项,可以进行压缩操作。
【远程下载】:输入下载地址,直接下载。
【文件下载】: 可以进行下载, 和在线编辑操作。
【配置数据】: 能否进行 主题切换、更换壁纸、播放器设置等等。
需要更细致的文件权限管理, 要结合底层文件系统权限进行设置。
kodexplorer 默认的配置文件: kodexplorer/config 文件夹中。
IIS7权限简述
IIS7对于以往是革命性的改变, 不再是以前缝缝补补的破衣裳, 全部重写的代码带来了更为优秀的性能与扩展能力. 他不再是一个Web Server了而变成了一个Application Server能够承载一切以通讯为基础的应用. 新的变革也带来了新的知识, 想更好的驾驭IIS7权限则是最基础的一部分也是最先需要了解的一部分. 本文让你初步了解IIS7的权限应用的基本相关知识, 了解来龙去脉不会再因应用程序突然多出一个莫名其妙权限而感到困惑. 虽然下面的内容均以Web服务为例, 但道理同样适用于以IIS7宿主的其他应用如FTP等等.
工作进程(Worker Process)
Worker Process是IIS应用程序的宿主, 在任务管理器中可以看到每一个Worker Process就是一个w3wp.exe.
工作进程标识(Worker Process Identity - WPI)
是Worker Process运行时的身份:
在IIS6, Windows 2008 IIS7下, 默认关联权限是NetworkService.
在Windows 2008 R2 IIS7.5下, 默认是关联权限是Application Pool Identity.
这里并没有提供一个直接的手段来设置Worker Process在什么身份标识下运行, 而是通过Application Pool的身份标识设定来实现的.
应用程序池(Application Pool)
Application Pool包含至少一个或多个Worker Process(Web Garden模式). 在运行时会将Application Pool的身份注入到Worker Process中, 就会以Application Pool的身份运行. 可以认为Application Pool与其包含的Worker Process的运行身份是一致的.
应用程序池标识(Application Pool Identity)
是Application Pool运行时的身份:
在IIS6, Windows 2008 IIS7下, 默认关联权限是NetworkService.
在Windows 2008 SP2 IIS7下, 运行身份设置时除了LocalService, NetworkService, LocalSystem外增加了Application Pool Identity一个选项, 而这个则是一个可以设置权限的虚拟标识.
在Windows 2008 R2 IIS7.5下, 默认是关联权限是 Application Pool Identity.
虚拟帐户 Application Pool Identity
上面提到的身份标识选项中你可以选择他, 但他只是一个统称, 并不存在实际的这个命名. 他依赖你的Application Pool的名称, 例如我的Application Pool名字叫做: SimonwAppPool, 那么这个虚拟标识的全名是: IIS AppPool\SimonwAppPool 运行在此Application Pool下的Worker Process从任务管理器中可以看到w3wp.exe是在SimonwAppPool这个用户下运行的. 可以在文件系统中对这个帐户分配权限. 这么做的好处是能够将能够将权限分离开来做粒度更细的配置, 不像是NetworkService有很多应用基于此, 设置一个权限影响一大片.
不过有时候通过UI找不到这个对象大约是个Bug, 通过命令行icacls处理即可.
什么是impersonate
这可能是一个让人容易迷糊的词汇impersonate - 扮演, 装扮. 他是指在某个特定的时刻以一个新的身份来代替已有身份来运行应用程序. 一个请求来临时在IIS处理管道中, 在authentication之前authenticated user的上下文是未知的, 这时你的应用程序以WPI的权限在运行. 在authentication之后authenticated user的上下文被建立, 但依然没有去扮演, 直至请求被映射到他的handler也就是handler mapping后应用程序开始使用扮演则将默认的WPI权限替换为authenticated user的权限来执行应用程序.
举个例子, php配置fastcgi时推荐设置fcgi.impersonate=true, 体现在请求一个php文件时
false: 始终使用WPI的权限, 默认权限是NetworkService
true: 使用authenticated user, 默认为IUSR, 也就是说可以让在站点级别上设置的权限生效.
用户组与用户
在IIS7下需要注意2个特殊的用户和用户组, 在IIS6中有着类似的对应关系
IIS6:IIS_WPG - IIS7:IIS_IUSRS
IIS6:IUSR_MachineName - IIS7:IUSR
最大的改变就是他们都成为了系统内置帐户(built-in account)有着统一的SID, 这样的好处在于做不同机器/系统间的拷贝时可以连带权限一同拷贝过去了, 在以往因为SID不同换了机器权限是无法有效拷贝的只能挨个手动设置, 现在方便多了.
IIS_IUSRS组
默认他会拥有适当的权限来运行Worker Process. 所有的WPI下的运行帐户均被隐式的自动加入到这个组中, 以获得最小的运行权限. 例如当你将SimonwAppPool这个Application Pool的运行身份设置为Application Pool Identity, 那么IIS AppPool\SimonwAppPool这个用户会被自动加入到IIS_IUSRS组中拥有他的全部权限. 因此对此组权限赋值需很小心很容易不知不觉中影响一大片.
IUSR默认匿名帐户
特别需要注意的别看他是一个匿名帐户并且没有密码, 但他属于authenticated users ,而authenticated users属于Users组, 因此IUSR默认具备了Users组的权限.
未完待续。。。