一、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
如果本文对您有帮助,可点我 头; 像,关; 注; 我