Windows Server 2019 安裝IIS及配置PHP 環(huán)境

一览祖、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、選擇好需要的組件和功能后安裝

安裝完成后称近,有可能需要重啟第队,根據(jù)需要重啟

IIS安裝后會自動添加web相關服務,設置為自動啟動(默認就是這個)

二刨秆、IIS上安裝PHP支持環(huán)境

1凳谦、PHP版本的選擇


PHP NTS版本和TS版本的區(qū)別 (參考csdn網(wǎng) catmes的文章)

1)NTS(non-thread-safe) 是指非線程安全。在執(zhí)行時不進行線程(thread)安全檢查

2)TS(thread-safe)?是指線程安全衡未。執(zhí)行時會進行線程(thread)安全檢查尸执,防止有新要求就啟動新線程的 CGI 執(zhí)行方式耗盡系統(tǒng)資源

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系統(tǒng)下如失,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 (通用網(wǎng)關接口/Common Gateway Interface):CGI就象是一座橋,把網(wǎng)頁和WEB服務器中的執(zhí)行程序連接起來洽胶,它把HTML接收的指令傳遞給服務器的執(zhí)行程序晒夹,再把服務器執(zhí)行程序的結果返還給HTML頁。CGI 的跨平臺性能極佳姊氓,幾乎可以在任何操作系統(tǒng)上實現(xiàn)丐怯。CGI方式在遇到連接請求(用戶 請求)先要創(chuàng)建cgi的子進程,激活一個CGI進程翔横,然后處理請求读跷,處理完后結束這個子進程。

FAST CGI (常駐型CGI / Long-Live CGI):FAST-CGI 是微軟為了解決 CGI 解釋器的不足而提出改進方案禾唁。是cgi的升級版本效览,F(xiàn)astCGI像是一個常駐(long-live)型的CGI,它可以一直執(zhí)行著荡短,只要激活后丐枉,不會每次都要花費時間去fork一 次。PHP使用 PHP-FPM(FastCGI Process Manager)掘托,全稱 PHP FastCGI進程管理器 進行管理瘦锹。當一個請求執(zhí)行完畢后不會注銷該進程,而是將改進程進入休眠期闪盔,當接收到新的請求時弯院,重新啟用改進程進行處理。FAST-CGI 較CGI 減少了進程的重復創(chuàng)建的資源占用泪掀。

CLI(命令行運行 / Command Line Interface):PHP在命令行運行的接口听绳,區(qū)別于在Web服務器上運行的PHP環(huán)境(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 的實現(xiàn)切油,并提供了進程管理的功能。?


3名惩、通過官網(wǎng)下載所需的php版本

我選擇windows 64位的 7.4.29-nts-win32-vc15-x64

首先從PHP官網(wǎng)? ?或者Windows下的PHP官網(wǎng)下載Windows版本的PHP安裝包澎胡。下載后解壓到一個路徑下,? 如d:php7429

當然也可安裝更新的php 8.0或以上的版本。

4娩鹉、配置Php.ini

在C:PHP目錄中找到php.ini-development文件攻谁,將其復制并重命名為php.ini。

使用文本編輯器打開php.ini文件弯予,根據(jù)需要進行配置調(diào)整戚宦,例如設置日期時區(qū)或啟用擴展模塊等。

主要是設置?timezone?時區(qū)? 打開 ext擴展锈嫩,設置常用的extension?等受楼,還有設置是否要輸出錯誤? 顯示出錯誤 ,及錯誤日志保存的目錄等

時區(qū)設置為上海 :?date.timezone = Asia/Shanghai? ? 或? PRC

另如果PHP用于企業(yè)微信回調(diào)的話呼寸,記得把?display_errors = On?改為?display_errors = Off,?否則會出現(xiàn)微信回調(diào)返回的參數(shù)是正確的艳汽,但可能因為有其它警告或錯誤提示,導致返回的結果夾雜了錯誤信息对雪,導致?企業(yè)微信不發(fā)送消息的問題河狐。

另根據(jù)需要添加需要的extension

如需要連接Access?數(shù)據(jù)庫,就添加

extension=php_com_dotnet.dll

如果需要加解密瑟捣,要打開

extension=openssl (不加提示錯誤:?Call to undefined function openssl_decrypt() )

可設置如下(根據(jù)需要加減):

;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()函數(shù)查看配置信息來確定。

顯示?對應的擴展是enabled?就算是啟用了圈浇。

另正式使用寥掐,修改 display_errors = Off? 以免錯誤信息?影響?企業(yè)微信回調(diào)的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召耘、配置系統(tǒng)環(huán)境變量

配置php環(huán)境變量:將PHP安裝的路徑(比如d:php7429)添加到環(huán)境變量中百炬。具體操作步驟如下:在桌面按下快捷鍵“Win+R”輸入“control sysdm.cpl,EnvironmentVariables”并點擊“確定”

在“系統(tǒng)變量”中找到“Path”,雙擊編輯(右鍵點擊我的電腦->屬性->高級系統(tǒng)設置->環(huán)境變量)

將php的安裝路徑加入到“變量值”中污它,多個路徑用分號隔開剖踊,并保存。


6衫贬、測試PHP安裝是否正常

然后在命令行輸入 php -v?測試版本德澈,有可能一開始會發(fā)生錯誤

1)如果出現(xiàn)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版本不兼容

但安裝后發(fā)現(xiàn)還是不兼容供常,提示錯誤是

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內(nèi)部版本不兼容

原因應該是:PHP7.4編譯已經(jīng)從vc++15變?yōu)榱藇c++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

可設置所有網(wǎng)站或當前網(wǎng)站?處理程序映射?設置解析PHP


打開IIS管理器图张,選擇服務器節(jié)點,然后雙擊“處理程序映射”诈悍。


在右側的“動作”面板中祸轮,點擊“添加模塊映射”。

在“請求路徑”中輸入“*.php”侥钳,選擇“可執(zhí)行文件”選項适袜,并瀏覽到PHP的php-cgi.exe可執(zhí)行文件。點擊“確定”保存設置即可以了

如果有需要舷夺,可在服務中重啟一個web服務器苦酱,或打開命令提示符售貌,輸入“iisreset”并按回車鍵重啟IIS服務。以便應用最新的php設置


四疫萤、然后測試PHP網(wǎng)頁是否正常

使用

<?php

phpinfo();

?>

保存為 phpinfo.php?測試

如果網(wǎng)頁空白颂跨,看看php?有否錯誤?提示?

查看錯誤提示是否開啟,這里可能存在后臺出現(xiàn)致命錯誤给僵,但是錯誤提示關閉所以頁面不提示

查看php后臺是否有出現(xiàn)die毫捣、exit、return 等無輸出中止執(zhí)行的操作

?一般可能錯誤是 php.ini 中的 short_open_tags 打開帝际,然后重新加載 php.ini 服務就OK了蔓同。

  這里又有兩個問題,一是怎么知道php執(zhí)行加載的是哪個 php.ini 文件呢蹲诀,可以在命令行下執(zhí)行: 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?執(zhí)行不了掖举,可能是php.ini?禁用了phpinfo?這個函數(shù)快骗,打開即可,見下文

五塔次、為了安全禁用錯誤顯示及相關的函數(shù)或類

disable_functions? ?本指令允許你基于安全原因禁止某些函數(shù)方篮。接受逗號分隔的函數(shù)名列表作為參數(shù)。 disable_functions 不受安全模式的影響励负。 本指令只能設置在 php.ini 中藕溅。例如不能將其設置在 httpd.conf

意思就是php.ini 里面可以配置一些方法,這些方法不能被調(diào)用继榆,如果你測試 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位,系統(tǒng)沒有對應的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位版本昏滴,就可繼續(xù)使用原有32位的?access database engine


如果本文對您有幫助猴鲫,可點我?頭; 像,關; 注; 我






?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谣殊,一起剝皮案震驚了整個濱河市拂共,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姻几,老刑警劉巖匣缘,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鲜棠,居然都是意外死亡,警方通過查閱死者的電腦和手機培慌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門豁陆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吵护,你說我怎么就攤上這事盒音。” “怎么了馅而?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵祥诽,是天一觀的道長。 經(jīng)常有香客問我瓮恭,道長雄坪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任屯蹦,我火速辦了婚禮维哈,結果婚禮上绳姨,老公的妹妹穿的比我還像新娘。我一直安慰自己阔挠,他們只是感情好飘庄,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著购撼,像睡著了一般跪削。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迂求,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天碾盐,我揣著相機與錄音,去河邊找鬼锁摔。 笑死廓旬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谐腰。 我是一名探鬼主播孕豹,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼十气!你這毒婦竟也來了励背?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砸西,失蹤者是張志新(化名)和其女友劉穎叶眉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芹枷,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡衅疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸳慈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饱溢。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖走芋,靈堂內(nèi)的尸體忽然破棺而出绩郎,到底是詐尸還是另有隱情,我是刑警寧澤翁逞,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布肋杖,位于F島的核電站,受9級特大地震影響挖函,放射性物質(zhì)發(fā)生泄漏状植。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浅萧。 院中可真熱鬧逐沙,春花似錦、人聲如沸洼畅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帝簇。三九已至徘郭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丧肴,已是汗流浹背残揉。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芋浮,地道東北人抱环。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像纸巷,于是被迫代替她去往敵國和親镇草。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容