動手
一、在本地安裝 Apache 與 PHP。安裝 xampp 套件即可。XAMPP 里面包含 Apache 和 PHP.windows 用戶也可安裝 WAMP,安裝包體積會小一些,也可單獨(dú)安裝Apache 和 PHP。
二、學(xué)習(xí) xampp或者wamp 的簡單配置使用,在本地啟動 web 服務(wù)器,通過瀏覽器訪問,通過瀏覽器打開本地 webserver 下的 php 文件。
<!DOCTYPE html>
<html>
<h1>My first PHP page</h1>
<body>
<?php
echo "Hello cttin";
?>
</body>
</html>

問題
一、簡單描述下web 服務(wù)器、PHP、數(shù)據(jù)庫、瀏覽器是如何實(shí)現(xiàn)動態(tài)網(wǎng)站的?
用戶輸入url
通過DNS解析,找到對應(yīng)的IP地址。具體過程可以參考從輸入URL到頁面加載完成的過程-DNS解析域名過程
瀏覽器找到對應(yīng)的主機(jī)IP后,與對應(yīng)的web服務(wù)器建立連接。通過HTTP協(xié)議向web服務(wù)發(fā)送請求,請求到服務(wù)器相應(yīng)目錄下的文件。
若訪問的為服務(wù)端的html文件,則請求服務(wù)器相應(yīng)目錄下的html文件。
若訪問的為服務(wù)端的php文件,則請求服務(wù)器相應(yīng)目錄下的php文件。服務(wù)器本身并不能處理php文件,就尋找并委托PHP應(yīng)用服務(wù)器來處理。最終把它翻譯為html靜態(tài)代碼,并交還給服務(wù)器。
若訪問的為服務(wù)端的mySQL數(shù)據(jù)庫,則請求服務(wù)器相應(yīng)目錄下的php文件。PHP應(yīng)用服務(wù)器接受服務(wù)器委托,收到相應(yīng)的文件。PHP應(yīng)用服務(wù)器
打開此php文件,php文件中通過對數(shù)據(jù)庫連接的代碼來連接本機(jī)或者網(wǎng)絡(luò)上其他機(jī)器的MySQL數(shù)據(jù)庫。且在php文件中通過標(biāo)準(zhǔn)的SQL查詢語句來獲取數(shù)據(jù)庫中的數(shù)據(jù)。接著,PHP應(yīng)用服務(wù)器再將數(shù)據(jù)生成html代碼。服務(wù)器將接收到的html文件輸出到瀏覽器,瀏覽器接收到服務(wù)器的響應(yīng)后,接收并下載服務(wù)端的html代碼。最后,瀏覽器解讀html代碼,并將它渲染到頁面。
詳細(xì)的可以參考動態(tài)網(wǎng)站訪問流程
二、常見的 WEB 服務(wù)器有哪些?
WEB服務(wù)器主要提供網(wǎng)上信息瀏覽服務(wù),常見的服務(wù)器有:
-
Apache
Apache是世界上用的最多的服務(wù)器。它的優(yōu)點(diǎn)是源代碼開放,因此有很多人參與到新功能的開發(fā)設(shè)計(jì);支持跨平臺使用,可以運(yùn)行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺上。 -
Lighttpd
Lighttpd是一個德國人寫的開源軟件,其目標(biāo)是專門針對高性能網(wǎng)站、安全、快速、兼容性好并且靈活的webserver環(huán)境。它具有內(nèi)存開銷低、CPU占用率低、效能好,以及模塊豐富等特點(diǎn)。 -
Tomcat
Tomcat是一個開放源代碼、運(yùn)行servlet和JSP Web應(yīng)用軟件的基于Java的Web應(yīng)用軟件容器。Tomcat Server是根據(jù)servlet和JSP規(guī)范執(zhí)行的,因此也可以說Tomcat Server實(shí)行了Apache-Jakarta規(guī)范,且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好。但是,Tomcat對靜態(tài)文件、高并發(fā)的處理比較弱。 -
Microsoft IIS(Internet Information Server)
IIS是一種Web服務(wù)組件,其中包括Web服務(wù)器、FTP服務(wù)器、NNTP服務(wù)器和SMTP服務(wù)器,分別用于網(wǎng)頁瀏覽、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。 -
Nginx
不僅是一個小巧且高效的HTTP服務(wù)器,也可以做一個高效的負(fù)載均衡反向代理,通過它接受用戶的請求并分發(fā)到多個Mongrel進(jìn)程可以極大提高Rails應(yīng)用的并發(fā)能力。
三、打開瀏覽器,在地址欄輸入URL到頁面展現(xiàn),整個過程發(fā)生了什么?(后臺語言 php,web服務(wù)器 nginx,數(shù)據(jù)庫 mysql)
- 輸入url。
- 通過DNS解析出主機(jī)的的IP地址。具體的過程分為:
- 瀏覽器會緩存DNS,存儲的時間隨瀏覽器自己定。
- 首先,操作系統(tǒng)先檢查自己的hosts文件是否有這個網(wǎng)址的映射關(guān)系,如果有就調(diào)用這個這個IP地址映射,完成域名解析。
- 當(dāng)hosts文件沒有網(wǎng)址的映射時,就會查找本地DNS緩存,如果有這個網(wǎng)址的映射關(guān)系,則直接返回,完成域名解析。
- 如果hosts和本地緩存都沒有相應(yīng)的網(wǎng)址映射關(guān)系,則首先會找TCP/IP參數(shù)中設(shè)置的首選DNS服務(wù)器(ISP的DNS)。此服務(wù)器接收查詢時,如果要查詢的域名包含在本地配置區(qū)域資源中,則返回解析結(jié)果給客戶機(jī),完成域名解析,此解析具有權(quán)威性。
- 如果要查詢的域名,不由本地DNS服務(wù)器區(qū)域解析,但該服務(wù)器已緩存了此網(wǎng)址映射關(guān)系,則調(diào)用這個IP地址映射,完成域名解析,此解析不具有權(quán)威性。
- 如果本地DNS服務(wù)器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地DNS服務(wù)器的設(shè)置(是否設(shè)置轉(zhuǎn)發(fā)器)進(jìn)行查詢,如果未用轉(zhuǎn)發(fā)模式,本地DNS就把請求發(fā)至 “根DNS服務(wù)器”,“根DNS服務(wù)器”收到請求后會判斷這個域名(.net)是誰來授權(quán)管理,并會返回一個負(fù)責(zé)該頂級域名服務(wù)器的一個IP。
- 如果用的是轉(zhuǎn)發(fā)模式,此DNS服務(wù)器就會把請求轉(zhuǎn)發(fā)至上一級DNS服務(wù)器,由上一級服務(wù)器進(jìn)行解析,上一級服務(wù)器如果不能解析,或找根DNS或把轉(zhuǎn)請求轉(zhuǎn)至上上級,以此循環(huán)。
- 找到對應(yīng)的主機(jī)IP后,與對應(yīng)的web服務(wù)器建立連接。瀏覽器通過HTTP協(xié)議向Nginx服務(wù)器發(fā)送請求,請求到相應(yīng)的php文件。PHP應(yīng)用服務(wù)器受服務(wù)器委托,找到對應(yīng)的文件,php文件中連接MySQL數(shù)據(jù)庫,通過標(biāo)準(zhǔn)的SQL查詢語句來獲取數(shù)據(jù)庫中的數(shù)據(jù),對它進(jìn)行操作。完成之后,PHP服務(wù)器將數(shù)據(jù)生成html代碼。
- Nginx服務(wù)器將接收到html文件輸出到瀏覽器,瀏覽器接收到服務(wù)器的響應(yīng)后,接收并下載服務(wù)端的html代碼。最后,瀏覽器解讀html代碼,并將它渲染到頁面。