HTML
1.HTML是什么
Html是超文本標記語言,主要用于做網(wǎng)頁杉辙,可以再網(wǎng)頁上顯示文字模捂、圖像、視頻蜘矢、聲音狂男。
HTML的結(jié)構(gòu)包括頭部(head),主體(body)兩部分品腹,其中頭部描述瀏覽器所需的信息岖食,而主體部分則包含所要說明的具體內(nèi)容。
●HTML只能做靜態(tài)網(wǎng)頁舞吭,不能做動態(tài)網(wǎng)頁
●網(wǎng)頁分為靜態(tài)網(wǎng)頁(Html)县耽、動態(tài)網(wǎng)頁(php/jsp/asp/asp.net)
● 靜態(tài)網(wǎng)頁:隨著html代碼的生成,頁面的內(nèi)容和顯示效果就基本上不會發(fā)生變化 了镣典,除非你修改頁面代碼
●動態(tài)網(wǎng)頁:頁面代碼雖然沒有變,但是顯示的內(nèi)容卻是可以隨著時間唾琼、環(huán)境或者數(shù)據(jù)庫操作的結(jié)果而發(fā)生改變的網(wǎng)頁兄春,可以交互的網(wǎng)頁屬于動態(tài)網(wǎng)頁
2.HTML的運行原理
Html有兩種運行方式
(1) 本地運行:直接用瀏覽器打開
(2) 遠程訪問:通過網(wǎng)站服務器瀏覽,以http的協(xié)議方式去打開锡溯,有網(wǎng)絡交互赶舆。瀏覽者首先會通過域名來尋找存放網(wǎng)頁的計算機服務器哑姚。如果找到,瀏覽器就會與該服務器聯(lián)系并建立信息傳輸通道使信息正確傳輸芜茵。信息通道建立好后叙量,瀏覽器就會向服務器要求下載目錄下的html文件。文件下載成功后九串,瀏覽器便會解釋執(zhí)行文件中的html標記绞佩。如果有圖像,則下載圖像文件猪钮,然后一起顯示在瀏覽器窗口上品山。
- 用戶輸入網(wǎng)址(假設是個html頁面,并且是第一次訪問)烤低,瀏覽器向服務器發(fā)出請求肘交,服務器返回html文件;
- 瀏覽器開始載入html代碼扑馁,發(fā)現(xiàn)<head>標簽內(nèi)有一個<link>標簽引用外部CSS文件涯呻;
- 瀏覽器又發(fā)出CSS文件的請求,服務器返回這個CSS文件腻要;
- 瀏覽器繼續(xù)載入html中<body>部分的代碼复罐,并且CSS文件已經(jīng)拿到手了,可以開始渲染頁面了闯第;
- 瀏覽器在代碼中發(fā)現(xiàn)一個<img>標簽引用了一張圖片市栗,向服務器發(fā)出請求。此時瀏覽器不會等到圖片下載完咳短,而是繼續(xù)渲染后面的代碼填帽;
- 服務器返回圖片文件,由于圖片占用了一定面積咙好,影響了后面段落的排布篡腌,因此瀏覽器需要回過頭來重新渲染這部分代碼;
- 瀏覽器發(fā)現(xiàn)了一個包含一行Javascript代碼的<script>標簽勾效,趕快運行它嘹悼;
- Javascript腳本執(zhí)行了這條語句,它命令瀏覽器隱藏掉代碼中的某個<div> (style.display=”none”)层宫。杯具啊杨伙,突然就少了這么一個元素,瀏覽器不得不重新渲染這部分代碼萌腿;
- 終于等到了</html>的到來限匣,瀏覽器淚流滿面……
- 等等,還沒完毁菱,用戶點了一下界面中的“換膚”按鈕米死,Javascript讓瀏覽器換了一下<link>標簽的CSS路徑锌历;11. 瀏覽器召集了在座的各位<div><span><ul><li>們,“大伙兒收拾收拾行李峦筒,咱得重新來過……”究西,瀏覽器向服務器請求了新的CSS文件,重新渲染頁面物喷。
PHP
1.Nginx服務器起到的作用
服務器分為兩類:
●前端服務器卤材。負責HTTP請求的解析與轉(zhuǎn)發(fā),或者處理靜態(tài)請求脯丝。輕量級商膊,并發(fā)量高,常常用作反向代理宠进、負載均衡等晕拆。說白了,就是負責請求發(fā)到哪里材蹬,或者取現(xiàn)成的文件之類的实幕。
●應用服務器。負責調(diào)用某一種語言的解釋器堤器,或某種語言寫的昆庇、已經(jīng)編譯好的程序,接收HTTP請求中的各個參數(shù)闸溃,按照開發(fā)者的意圖做出動作整吆,并生成結(jié)果返回給調(diào)用方。
Nginx一般用作前端服務器辉川,解析HTTP請求表蝙,并把請求傳遞到下一個地方(下一臺服務器)
2.關于服務器端的行為
1、當用戶訪問的是一個靜態(tài)頁面時乓旗,服務器會直接返回用戶請求的頁面府蛇,瀏覽器能夠解析靜態(tài)頁面
2、當用戶訪問的頁面含有php代碼時屿愚,服務器會將這部分交給php模塊進行處理汇跨,php模塊處理完后將結(jié)果放回給服務器,然后服務器再返回用戶的請求
3妆距、當用戶訪問的頁面有對數(shù)據(jù)庫進行操作時穷遂,服務器會將其交給php模塊,php模塊再將數(shù)據(jù)庫處理的部分交給數(shù)據(jù)庫服務器進行處理娱据,處理完成后返回給服務器蚪黑,服務器再返回給用戶
3.php網(wǎng)頁運行原理
瀏覽器〉輸入網(wǎng)址〉找到對應服務器〉apache提供服務開始
-->如果是html文件〉從文件夾中拿出文件 > 發(fā)出去(經(jīng)過互聯(lián)網(wǎng))給瀏覽器
-->如果是php文件〉從文件夾中拿出文件〉交與php模塊執(zhí)行〉返回給apache〉發(fā)給瀏覽器
4.PHP是什么
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛口猜,主要適用于Web開發(fā)領域衔掸。PHP 獨特的語法混合了C、Java妆棒、Perl以及PHP自創(chuàng)的語法澡腾。它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁。用PHP做出的動態(tài)頁面與其他的編程語言相比糕珊,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執(zhí)行动分,執(zhí)行效率比完全生成HTML標記的CGI要高許多;PHP還可以執(zhí)行編譯后代碼红选,編譯可以達到加密和優(yōu)化代碼運行澜公,使代碼運行更快。
5.PHP的設計理念及特點
●多進程模型:由于PHP是多進程模型喇肋,不同請求間互不干涉坟乾,這樣保證了一個請求掛掉不會對全盤服務造成影響,當然蝶防,隨著時代發(fā)展甚侣,PHP也早已支持多線程模型。
●弱類型語言:和C/C++间学、Java殷费、C#等語言不同,PHP是一門弱類型語言低葫。一個變量的類型并不是一開始就確定不變详羡,運行中才會確定并可能發(fā)生隱式或顯式的類型轉(zhuǎn)換,這種機制的靈活性在web開發(fā)中非常方便氮采、高效殷绍。
●引擎(Zend)+組件(ext)的模式降低內(nèi)部耦合。
●中間層(sapi)隔絕web server和PHP鹊漠。
●語法簡單靈活主到,沒有太多規(guī)范。缺點導致風格混雜躯概,但再差的程序員也不會寫出太離譜危害全局的程序登钥。
6.PHP的四層體系
PHP的核心架構(gòu)如下圖:●Zend引擎:Zend整體用純C實現(xiàn),是PHP的內(nèi)核部分娶靡,它將PHP代碼翻譯(詞法牧牢、語法解析等一系列編譯過程)為可執(zhí)行opcode的處理并實現(xiàn)相應的處理方法、實現(xiàn)了基本的數(shù)據(jù)結(jié)構(gòu)(如hashtable、oo)塔鳍、內(nèi)存分配及管理伯铣、提供了相應的api方法供外部調(diào)用,是一切的核心轮纫,所有的外圍功能均圍繞Zend實現(xiàn)腔寡。
●Extensions:圍繞著Zend引擎,extensions通過組件式的方式提供各種基礎服務掌唾,我們常見的各種內(nèi)置函數(shù)(如array系列)放前、標準庫等都是通過extension來實現(xiàn),用戶也可以根據(jù)需要實現(xiàn)自己的extension以達到功能擴展糯彬、性能優(yōu)化等目的(如貼吧正在使用的PHP中間層凭语、富文本解析就是extension的典型應用)。
●Sapi:Sapi全稱是Server Application Programming Interface撩扒,也就是服務端應用編程接口似扔,Sapi通過一系列鉤子函數(shù),使得PHP可以和外圍交互數(shù)據(jù)却舀,這是PHP非常優(yōu)雅和成功的一個設計虫几,通過sapi成功的將PHP本身和上層應用解耦隔離,PHP可以不再考慮如何針對不同應用進行兼容挽拔,而應用本身也可以針對自己的特點實現(xiàn)不同的處理方式辆脸。
●上層應用:這就是我們平時編寫的PHP程序,通過不同的sapi方式得到各種各樣的應用模式螃诅,如通過webserver實現(xiàn)web應用啡氢、在命令行下以腳本方式運行等等术裸。
如果PHP是一輛車,那么車的框架就是PHP本身袭艺,Zend是車的引擎(發(fā)動機),Ext下面的各種組件就是車的輪子猾编,Sapi可以看做是公路,車可以跑在不同類型的公路上答倡,而一次PHP程序的執(zhí)行就是汽車跑在公路上轰传。因此获茬,我們需要:性能優(yōu)異的引擎+合適的車輪+正確的跑道港庄。
例子
image.png
這個是一段簡單的php代碼恕曲,文件是hello.php,我通過www.xxx.com/hello.php請求這個頁面的時候佩谣,php解析數(shù)據(jù)返回的過程:
1-通過xxx.com/hello.php運行php文件度帮,這是你的web服務器做的事情,與php無關稿存。
2-是web服務器收到你的請求,然后找到hello.php這個文件瞳秽,然后調(diào)用php解釋器解析文件
3-php解析hello.php返回解析結(jié)果給web服務器
4-web服務器返回結(jié)果給瀏覽器
5-瀏覽器把這個結(jié)果解析成網(wǎng)頁呈現(xiàn)到你的面前
這是全過程瓣履,而php只在步驟3發(fā)生了作用。
當php解釋hello.php時判斷是不是php代碼练俐,不是就原樣返回袖迎,是就執(zhí)行并把執(zhí)行結(jié)果返回。
怎么判斷是不是php代碼呢腺晾?寫在<?php ?>的就是燕锥,否則都不是。
如何是不是php代碼是你配置:比如apache里面可以配置.php,.php3,.phtml等擴展名的文件是由php解釋器執(zhí)行的悯蝉。php會解釋完整的代碼归形,代碼內(nèi)容只有兩種,php代碼和非php代碼鼻由,非php代碼原樣返回暇榴,不管是不是html,因為php并不認識非php代碼蕉世。echo代表輸出蔼紧,還有其他的命令也有輸出的意思,比如var_dump, print_r等狠轻。如果你的源碼中沒有任何輸出指令就不會返回任何內(nèi)容奸例。當然如果執(zhí)行時出現(xiàn)了異常視php.ini的配置可能返回錯誤信息。