1. 程式人生 > 實用技巧 >php工作原理以及與lamp的關係

php工作原理以及與lamp的關係

>>> hot3.png

php是引擎 Apache是web伺服器


那麼如何優化網站呢?其 實就是觸發時間到生成相應的頁面過程,這個時間差越小,使用者體驗越好,那麼根絕上面幾步,我們可以想到的優化方法就是:客戶端提交的資料大小已經併發數量 ----- 都提交給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遠端連線即可。




借用一篇文章來加深一下理解:此處註明出處 http://www.51testing.com/html/66/206966-806244.html

今天,在討論環境問題的時候,突然腦子裡面閃過一個問題,LAMP這樣的結構,mysql可以獨立於其它幾個單獨存在,然後通過一個$connect = mysql_connect("localhost" user_name password)來進行跟DB之間的通訊,那麼我把apache和php能不能也分開獨立部署在不同的機器上呢?
於是,我帶著這樣的問題,查閱了下apache解析php的原理和php本身的執行原理。其中談到,當apache在啟動之後,動態的載入了一些模組,當 中如果需要處理php的請求,就有對應的mod_php5.so這個模組被動態載入,同時這個模組會做一個ap hook_config的動作,從而使得apache在啟動起來之後,就通過hook技術,連帶啟動mod_php5.so這個模組的載入,接收客戶端的 php請求。php請求傳送到web server之 後,通過這個模組接收了php請求,那麼對應的php檔案在執行的時候,通過php核心將相應內容轉發給zend 引擎,zend引擎在解析處理的時候,與php的擴充套件層進行相應的配合處理,最終在擴充套件層處理完成之後,遞迴的交還控制權,最後由web server將處理的結果返回給客戶端的瀏覽器。
那麼,在這裡最起碼可以明確一個問題,如果在A,B兩臺機器上,B機器僅僅只安裝PHP,那麼B機器本身是沒有辦法將來自於客戶端的PHP請求解析執行完 成使用者需要的內容返回到客戶端的瀏覽器的。道理我想大家都明白了,因為B機器如果連web server都沒,根本就無法完成對使用者端的請求的接收,那麼無法接收到客戶端的請求又何來處理呢?儘管這個問題很明顯,但是我又有了另外一個疑惑,那麼 我在A機器上安裝好apache這樣的web server,通過在A機器上loadModule對應的PHP整合處理模組mod_php5.so,那麼由A機器來接受使用者請求,對於PHP請求,由A 機器中的PHP處理模組將其轉發給B機器(通過TCP協議建立連線,轉發對應的資料)然後在B機器上完成業務邏輯的處理,在通過建立的連接回傳處理完成的 資料,最終由A機器將整個頁面內容回傳給使用者的瀏覽器端,這個可不可以呢?mod_php5.so能不能有這個實現呢?就是在A機器接收到請求後,它能完 成tcp到B機器把請求的引數內容傳給這個php邏輯處理檔案呢?
有同事問我,為什麼我會想這麼做呢?我是這樣想的,假設,這樣的情況是可以的,那麼我們是否可以在A機器上只安裝apache,然後A機器主要用來處理客 戶端的請求,接收和轉發最多還有一個回傳內容給瀏覽器,而更多的邏輯處理我們就可以放在另外的機器上去處理,比如這裡的B機器。這樣的話,我們就可以儘可 能多的利用A機器的資源來完成更多的請求的處理,從而提升整體的架構的效能處理能力呢?(這個有點類似與nginx的反向代理的意思)
對於這個問題我還不能確定,打算研讀下mod_php5.so的原始檔來看看,是否能否確定這個問題?
以上純屬個人的思考,總結,錯誤之處,遺漏之處難免,歡迎高人指點迷津,謝謝



轉載於:https://my.oschina.net/daquan/blog/496991