php是引擎 Apache是web服務器
php
那麼如何優化網站呢?其 實就是觸發時間到生成相應的頁面過程,這個時間差越小,用戶體驗越好,那麼根絕上面幾步,咱們能夠想到的優化方法就是:客戶端提交的數據大小已經併發數量 ----- 都提交給apache服務器處理---apache分配給php引擎---php程序和讀取數據庫---輸出html
1:優化 客戶端數據提交,不過當用戶達到必定級別時候,這個數據仍是很大的mysql
2:優化 web服務器,主要是處理高併發的性能nginx
3:優化php引擎程序:samrty模版的引擎很不錯web
4:優化php程序:主要是數據庫讀取的方面和php自身程序效率ajax
5:數據庫優化:數據庫的配置以及優化方式,達到與php讀取效率的最完美匹配sql
6:輸出優化:使用js等技術 ajax技術數據庫
php,apache和mysql組合的工做過程:apache
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的源文件來看看,是否可否肯定這個問題? 以上純屬我的的思考,總結,錯誤之處,遺漏之處不免,歡迎高人指點迷津,謝謝