使用IIS来运行PHP还是比较简单的,可以轻松实现多PHP版本运行,需要准备的文件:
- IIS。
- VC运行库(VC运行环境)。
微软官网上没找到,还是CSDN的网友比较厉害:
下载地址:
https://download.csdn.net/download/p270228163/11079423(vc9到vc15,32位和64位全有,此下载地址仅供参考) - windows环境下的PHP包。(如:php-7.4.4-nts-Win32-vc15-x64.zip,nts表示为非线程安全,Win32表示适用于32位系统,vc15表示系统需要安装VC15的运行环境)
下载地址:
PHP For Windows: Binaries and sources Releases(最新版本的下载列表)
windows.php.net - /downloads/releases/archives/(历史版本的下载列表)
准备好之后,开始配置。
第一步:IIS安装
打开:“控制面板-》程序-》启用或关闭windows功能”对话框,列表中找到Internet信息服务选项(Internet Information Services,简写即:IIS),选中:
- Web管理工具-》IIS管理控制台
- 万维网服务,必选项:常见HTTP功能(静态内容,默认文档 两个项目必选),应用程序开发功能(有ISAPI的项目必选)
- 确定,等待安装完毕。
第二步:安装VC运行环境(已经安装过对应PHP版本的VC运行库,可以跳过此步)
- 解压下载的库包。
- 找到对应的版本,双击运行安装(注意版本和系统)。
第三步:配置PHP
- 解压PHP包。
- 修改PHP的配置文件:在解压开的PHP包的目录里有两个PHP的配置文件(php.ini-production和php.ini-development)分别表示生产和开发环境。复制其中的一个文件(生产环境用生产文件,开发环境用开发文件)改名为php.ini(放在PHP的这个目录里就好,不用复制到其它地方)。
- 用记事本或其它编辑器打开php.ini,开启找到extension_dir = "ext",将前边的分号去掉。
- 开启常用的PHP扩展,将前边的分号去掉:extension=php_curl.dll,extension=php_gd2.dll,extension=php_mbstring.dll,extension=php_mysql.dll(已不建议使用),extension=php_mysqli.dll,extension=php_openssl.dll,extension=php_pdo_mysql.dll。
- 保存。
第四步:配置IIS运行PHP。
- 打开IIS管理器。
- 服务和应用程序-》Internet Information Services-》网站,右键(或右边栏)-》添加站点。
- 选中添加好的站点,主窗口第二栏(IIS)里,双击处理程序映射,右边栏点击添加模块映射。
- 填写内容,请求路径:*.php,模块:FastCgiModule,可执行文件:path\to\php\php-cgi.exe(必须是这个),名称:随便起,我这里写“PHP7”,点击确定。(不同的站点可以选择不同的PHP版本)
- 在主窗口第二栏内,点击默认文档,添加一个:index.php。
- 点击确定后,会在站点的根目录生成一个web.config文件,保存了这个站点的PHP的相关配置信息。
- 在站点根目录下,添加一个PHP文件:info.php
<?php phpinfo();
- 访问下这个文件,如果能显示PHP的信息,则表示配置正确。
- URL重写模块下载:URL Rewrite : The Official Microsoft IIS Site
参考图片:
命令行执行下,看是否报错。下边的报错说明没有安装VC11的运行库,安装后就可以了。
PHP IIS 环境 ob_flush()刷新缓冲区执行完才显示 解决办法,iis缓冲区原因
找到C:\Windows\System32\inetsrv\config\applicationHost.config 文件;
找到这段代码 <handlers accessPolicy="Read, Script">
找到<add name="PHP" path="*.php" ...................................
在结束标签前添加代码 responseBufferLimit="0";
我的完整代码是<add name="PHP" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="F:\web_huanjing\php-5.6.40\php-cgi.exe" resourceType="File" responseBufferLimit="0"/>
<?php
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Pragma: no-cache');
ob_end_clean();
//ob_end_flush();
ob_implicit_flush(1);
echo 'Show time ...<br>';
//输出到浏览器
flush();
for($i=0; $i<=10; $i++)
{
echo 'process '.$i.'0%<br>';
echo str_repeat(' ', 4096);
//如果浏览器已关闭
if ( connection_aborted() )
{
//如果希望关了浏览器后程序继续执行,把这行去掉即可
exit;
}
//输出
flush();
//暂停1s
sleep(1);
}
//这里已经是结束了,就不用再flush了。
echo 'The End.<br>';