最近搭建服務器,突然感覺lamp之間到底是怎么工作的,或者是怎么聯系起來?平時只是寫程序,重來沒有思考過他們之間的工作原理,借這個機會趕集惡補一下這個知識。
l:即操作系統,也就是建立在電腦硬件基礎上的最底層的東西,相當於:國家這個概念,而win或者linux就相當於不同的國家
a:就是web服務器,這個服務器 相當於國家領導人:主席,起到指導作用。
m:就是數據庫,存儲數據的地方,相當 銀行
p:就是php,相當於下屬,做事情的人
也就是說php是apache的一個外掛程序,必須依靠web服務器才可以運行。當客戶端瀏覽器觸發事件--->php程序提交到apache服務器---->apache服務器根據php程序的特點判斷是php程序,提交給php引擎程序--->php引擎程序解析並讀取數據庫生成相應的頁面php引擎;像smarty就是,有自己的標簽模式並可以解析這種標簽 生成原生態的php程序
那么如何優化網站呢?其實就是觸發時間到生成相應的頁面過程,這個時間差越小,用戶體驗越好,那么根絕上面幾步,我們可以想到的優化方法就是:客戶端提交的數據大小已經並發數量----- 都提交給apache服務器處理---apache分配給php引擎---php程序和讀取數據庫---輸出
1:優化 客戶端數據提交,不過當用戶達到一定級別時候,這個數據還是很大的
2:優化 web服務器,主要是處理高並發的性能
3:優化php引擎程序:samrty模版的引擎很不錯
4:優化php程序:主要是數據庫讀取的方面和php自身程序效率
5:數據庫優化:數據庫的配置以及優化方式,達到與php讀取效率的最完美匹配
6:輸出優化:使用js等技術 ajax技術
php,apache和mysql組合的工作過程:
PHP的所有應用程序都是通過WEB服務器(如IIS或Apache)和PHP引擎程序解釋執行完成的,工作過程:
(1)當用戶在瀏覽器地址中輸入要訪問的PHP頁面文件名,然后回車就會觸發這個PHP請求,並將請求傳送化支持PHP的WEB服務器。
(2)WEB服務器接受這個請求,並根據其后綴進行判斷如果是一個PHP請求,WEB服務器從硬盤或內存中取出用戶要訪問的PHP應用程序,並將其發送給PHP引擎程序。
(3)PHP引擎程序將會對WEB服務器傳送過來的文件從頭到尾進行掃描並根據命令從后台讀取,處理數據,並動態地生成相應的HTML頁面。
(4)PHP引擎將生成HTML頁面返回給WEB服務器。WEB服務器再將HTML頁面返回給客戶端瀏覽器。
簡言之:apache是WEB服務器,它可以解析php語言。
Apache的工作原理:Web系統是客戶端/服務器式的,所以應該有服務器程序和客戶端程序兩部分。常用的服務器程序是Apache;常用的客戶端程序是瀏覽器(如IE、 Netscape、Mozilla)。我們可以在瀏覽器的地址欄內輸入統一資源定位地址(URL)來訪問Web頁面。Web最基本的概念是超文本 (Hypertext)。它使得文本不再是傳統的書頁式文本,而是可以在閱讀過程中從一個頁面位置跳轉到另一個頁面位置。用來書寫Web頁面的語言稱為超 文本標記語言,即HTML。WWW服務遵從HTTP協議,默認的TCP/IP端口是80,客戶端與服務器的通信過程簡述如下:
(1)客戶端(瀏覽器)和Web服務器建立TCP連接,連接建立以后,向Web服務器發出訪問請求(如get)。根據HTTP協議,該請求中包含了客戶端的IP地址、瀏覽器的類型和請求的URL等一系列信息。
(2)Web服務器收到請求后,將客戶端要求的頁面內容返回到客戶端。如果出現錯誤,那么返回錯誤代碼。
(3)斷開與遠端Web服務器的連接
php工作原理:
如下圖所示:
apache,php以及mysql的關系:
apache是web服務器,主要是請求和響應的功能,是一種軟件,用於發布網站。在配置文件中可以設置文件根目錄,處理的文件類型以及端口等。apache單獨不能處理php代碼。
php(php 應用程序服務器):不能單獨存在的,需要以apache為依托。也可以說php是apache功能模塊的一種擴展,php作為apache的外掛,用於解 析php代碼。經過解析的動態網頁此時就不存在<?php ?>了。當apache服務啟動的同時也啟動了php。也就是說php必須和apache安裝在同一台服務器上,不可以分割。
mysql:一種開源的很流行的關系型數據庫。與apache無關,只是在響應php代碼中的sql操作的時候才被訪問。不需要與apache安裝在同一台服務器上,可以單獨存在,只需php遠程連接即可。