WindowsServer2019安装IIS及配置PHP环境

小辣椒高效Office 2024-10-22 21:14:41
一、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

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

0 阅读:11