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閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容