Windows Server 2019 安装IIS及配置PHP 环境

一、Windows Server 2019 安装IIS

1、添加角色与功能


选择基于角色与功能的安装

然后选择当前服务器

2、选择Web 服务器(IIS)


注意,因为我们可能要用到asp , asp.net  php 所以把

asp  , asp.net 4.7 ,isapi扩展,isapi筛选器。均选上,另php要用到php-cgi.exe , 需要cgi支持,把cgi也选上

3、选择好需要的组件和功能后安装

安装完成后,有可能需要重启,根据需要重启

IIS安装后会自动添加web相关服务,设置为自动启动(默认就是这个)

二、IIS上安装PHP支持环境

1、PHP版本的选择


PHP NTS版本和TS版本的区别 (参考csdn网 catmes的文章)

1)NTS(non-thread-safe) 是指非线程安全。在执行时不进行线程(thread)安全检查

2)TS(thread-safe) 是指线程安全。执行时会进行线程(thread)安全检查,防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源

2、选择PHP版本的建议

1)以下情况建议使用 NTS(non-thread-safe) 版本:

PHP-FPM 运行模式(比如搭配Nginx或者Apache的 mod_fastcgi )

PHP-CGI (比如搭配Apache的 mod_fcgid 或者Win上的IIS)来运行PHP

以 FAST-CGI 或 PHP-FPM 方式运行就用 NTS 非线程安全版


2)以下情况建议使用 TS(thread-safe) 版本:

使用 pthreads 这个多线程的PECL扩展

PHP以 MOD_PHP 嵌入多线程运行下的Apache。比如Apache在Linux上提供的 Event MPM 就是一个多进程多线程的工作模型,Windows上Apache采用的 WinNT MPM 也是一个多线程模型

windows系统下,Apache(IIS) + PHP 组合,以 ISAPI 的方式运行

在PHP5.3以后,PHP不再有ISAPI模式,安装后也不再有php5isapi.dll这个文件。要在IIS6上使用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。


总结

Apache + PHP,PHP一般作为Apache的模块进行运行 选TS

以 ISAPI 方式运行就用 TS

Nginx + PHP ,(以php-fpm的方式运行)选NTS

IIS(fast-cgi) + PHP 选NTS

PHP的运行模式

CGI (通用网关接口/Common Gateway Interface):CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。CGI方式在遇到连接请求(用户 请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。

FAST CGI (常驻型CGI / Long-Live CGI):FAST-CGI 是微软为了解决 CGI 解释器的不足而提出改进方案。是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用 PHP-FPM(FastCGI Process Manager),全称 PHP FastCGI进程管理器 进行管理。当一个请求执行完毕后不会注销该进程,而是将改进程进入休眠期,当接收到新的请求时,重新启用改进程进行处理。FAST-CGI 较CGI 减少了进程的重复创建的资源占用。

CLI(命令行运行 / Command Line Interface):PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)

模块模式:以 mod_php5 模块的形式集成

ISAPI(Internet Server Application Programming Interface): 通常是指被http服务器所加载,以服务器的模块形式运行,由微软提出,故只能在win平台上运行。例如win下的apache,iis。

PHP-FPM(PHP-Fastcgi Process Manager): php-fpm 是 FastCGI 的实现,并提供了进程管理的功能。 


3、通过官网下载所需的php版本

我选择windows 64位的 7.4.29-nts-win32-vc15-x64

首先从PHP官网   或者Windows下的PHP官网下载Windows版本的PHP安装包。下载后解压到一个路径下,  如d:php7429

当然也可安装更新的php 8.0或以上的版本。

4、配置Php.ini

在C:PHP目录中找到php.ini-development文件,将其复制并重命名为php.ini。

使用文本编辑器打开php.ini文件,根据需要进行配置调整,例如设置日期时区或启用扩展模块等。

主要是设置 timezone 时区  打开 ext扩展,设置常用的extension 等,还有设置是否要输出错误  显示出错误 ,及错误日志保存的目录等

时区设置为上海 : date.timezone = Asia/Shanghai    或  PRC

另如果PHP用于企业微信回调的话,记得把 display_errors = On 改为 display_errors = Off, 否则会出现微信回调返回的参数是正确的,但可能因为有其它警告或错误提示,导致返回的结果夹杂了错误信息,导致 企业微信不发送消息的问题。

另根据需要添加需要的extension

如需要连接Access 数据库,就添加

extension=php_com_dotnet.dll

如果需要加解密,要打开

extension=openssl (不加提示错误: Call to undefined function openssl_decrypt() )

可设置如下(根据需要加减):

;extension=bz2

extension=curl

;extension=ffi

;extension=ftp

;extension=fileinfo

extension=gd2

;extension=gettext

extension=gmp

;extension=intl

;extension=imap

;extension=ldap

extension=mbstring

;extension=exif      ; Must be after mbstring as it depends on it

extension=mysqli

;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client

;extension=odbc

extension=openssl

;extension=pdo_firebird

;extension=pdo_mysql

;extension=pdo_oci

;extension=pdo_odbc

;extension=pdo_pgsql

;extension=pdo_sqlite

;extension=pgsql

;extension=shmop


; The MIBS data available in the PHP distribution must be installed.

; See http://www.php.net/manual/en/snmp.installation.php

;extension=snmp

extension=soap

extension=sockets

extension=php_com_dotnet.dll

;extension=sodium

;extension=sqlite3

;extension=tidy

;extension=xmlrpc

;extension=xsl

最后注意有一点 ,必须 把 extension_dir = "ext" 前面的注释去掉。否则php找不到相应的 扩展的dll ,导致扩展均没有启动,如openssl

测试是扩展是否正常,使用phinfo.php 测试一下就知道了

在输出的信息中,可以搜索“OpenSSL Support”一项,如果其值为“enabled”,则表示PHP支持OpenSSL。如果没有搜索到该项,则表示PHP不支持OpenSSL。

总结一下,要确定PHP是否支持OpenSSL,可以通过检查php.ini文件中是否注释掉了相关行来判断,也可以通过运行phpinfo()函数查看配置信息来确定。

显示 对应的扩展是enabled 就算是启用了。

另正式使用,修改 display_errors = Off  以免错误信息 影响 企业微信回调的print 或echo 信息(污染)


注意:如果是iis旧版(IIS新版不需要),复制php安装目录中的:

libeay32.dll

ssleay32.dll

ext目录中的php_openssl.dll

至c:windowssystem32

再重启IIS

如果是apache服务器,还需要从php安装根目录中拷贝 libeay32.dll 和 ssleay32.dll 然后 覆盖掉apache/bin 下的对应文件(注意需要将httpd关闭)

5、配置系统环境变量

配置php环境变量:将PHP安装的路径(比如d:php7429)添加到环境变量中。具体操作步骤如下:在桌面按下快捷键“Win+R”输入“control sysdm.cpl,EnvironmentVariables”并点击“确定”

在“系统变量”中找到“Path”,双击编辑(右键点击我的电脑->属性->高级系统设置->环境变量)

将php的安装路径加入到“变量值”中,多个路径用分号隔开,并保存。


6、测试PHP安装是否正常

然后在命令行输入 php -v 测试版本,有可能一开始会发生错误

1)如果出现PHP报错缺少vcruntime140.dll  就要安装vc++运行库

提示丢失VCRUNTIME140.DLL。

原因:Windows下运行php7需要Visual C++Redistributable 2015而之前的版本不需要那么高。

解决办法:64位版对应vc_redist.x64.exe,下载安装后,再次运行php.exe成功。

运行php.exe提示缺少vsruntime140.dll,安装响应版本vc++运行库即可,这里是vc++2015。

2)VCRUNTIME140.DLL版本不兼容

但安装后发现还是不兼容,提示错误是

PHP Warning:  'vcruntime140.dll' 14.0 is not compatible with this PHP build linked with 14.16 in Unknown on line 0

或者:

PHP警告:“vcruntime140.dll”14.0与第0行未知中与14.16链接的此PHP内部版本不兼容

原因应该是:PHP7.4编译已经从vc++15变为了vc++16(vc2019)

3)安装更新的版本

下载VC运行库2015-2019,这个比较全,下载之后安装,然后重启电脑,就可以了:

https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads

我安装  x64这个版本

注意,如果你为了兼容 Access 32位的 accessdatabaseengine 使用php 32位的版本的话,那你 vc_redist.x64.exe 就要换成 vc_redist.x86.exe (32位的版本)  就是要一一对应。

再运行 php -v 就正常了


一定要先测试 php -v 版本号正常了,才进行后面步骤,否则phpinfo.php 测试肯定失败 为空白。

重点:32位PHP与64位PHP 要分别 对应相应的 32位或64位 vc_redist

三、配置IIS以支持PHP

可设置所有网站或当前网站 处理程序映射 设置解析PHP


打开IIS管理器,选择服务器节点,然后双击“处理程序映射”。


在右侧的“动作”面板中,点击“添加模块映射”。

在“请求路径”中输入“*.php”,选择“可执行文件”选项,并浏览到PHP的php-cgi.exe可执行文件。点击“确定”保存设置即可以了

如果有需要,可在服务中重启一个web服务器,或打开命令提示符,输入“iisreset”并按回车键重启IIS服务。以便应用最新的php设置


四、然后测试PHP网页是否正常

使用

<?php

phpinfo();

?>

保存为 phpinfo.php 测试

如果网页空白,看看php 有否错误 提示 

查看错误提示是否开启,这里可能存在后台出现致命错误,但是错误提示关闭所以页面不提示

查看php后台是否有出现die、exit、return 等无输出中止执行的操作

 一般可能错误是 php.ini 中的 short_open_tags 打开,然后重新加载 php.ini 服务就OK了。

  这里又有两个问题,一是怎么知道php执行加载的是哪个 php.ini 文件呢,可以在命令行下执行: php –ini 来找到php.ini 文件;二是如何重新加载 php.ini 文件,如何你的服务器上面启用了php-fpm,一般来说重启 php-fpm 就OK了,命令为: service php-fmp restart ,如果没有启用 php-fpm 服务(较早版本的php),一般重启 apache服务就OK,命令为 service httpd restart 

你是用的tp框架还是?tp框架别忘了加$this->display();

另phinfo.php 执行不了,可能是php.ini 禁用了phpinfo 这个函数,打开即可,见下文

五、为了安全禁用错误显示及相关的函数或类

disable_functions   本指令允许你基于安全原因禁止某些函数。接受逗号分隔的函数名列表作为参数。 disable_functions 不受安全模式的影响。 本指令只能设置在 php.ini 中。例如不能将其设置在 httpd.conf

意思就是php.ini 里面可以配置一些方法,这些方法不能被调用,如果你测试 phpinfo 没有反应的话,可能是在这里被禁用了。打开php.ini 找到这个配置,看看phpinfo() 这个方法是否被禁用了,如下:

disable_functions =
phpinfo,system,proc_open,proc_close,show_source,popen,pclose

 临时把 phpinfo() 这个方法从disable_functions 中删除掉,重新加载 php.ini 文件,然后再次从浏览器访问 test.php就成功了。不过 phpinfo() 是很敏感的信息,建议正式使用不要暴露给客户端,测试完赶紧关掉。 

我按如下设置:

disable_functions =phpinfo,exec,system,passthru,popen,pclose,shell_exec,proc_open,dl,chmod,escapeshellarg,escapeshellcmd,sh2_exec,proc_terminate,proc_close

六、判断你的PHP是32位还是64位

为什么要判断PHP是32位还是64位,因为如果你使用64位,则可能需要使用64位的相关应用库,如Access database engine 也需要是64位,如果PHP是32位,则Access database engine 也需要是32位.

如服务器有一个php 32位的5.4版本,有一个 php 7.4.9的 64位版本。

php5.4 支持Access ace ado . 是因为 安装的 access database engine 可能是32位, php5.4安装的是 32位

用命令行测试

php -r "echo PHP_INT_SIZE;" 返回是4 ,代表32位

4


而php7.4.9 不 支持Access ace ado . 是因为 安装的 access database engine 可能是32位, php7.49要求是64位,系统没有对应的64位版本,所以提示   ADODB.Connection 未找到提供程序

php -r "echo PHP_INT_SIZE;" 返回是8 ,代表64位

8

解决办法 有2个

1. 使用 php 7.4.9 的64位版本,再安装 64位的 access database engine

2. 使用 php 7.4.9 的32位版本,就可继续使用原有32位的 access database engine


如果本文对您有帮助,可点我 头; 像,关; 注; 我






©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容