Java Web服務器和PHP最大的區別在於PHP沒有自己的內置Web服務器。 (好吧,新版本可以,但應該只用於測試,它不是一個生產就緒的Web服務器。)PHP本身基本上是一個可執行文件,它讀取PHP代碼的源代碼文件並解釋/執行寫入的命令文件。而已。簡而言之,這就是PHP的架構。
該可執行文件支持用戶級PHP代碼可以調用的默認API,並且可以添加擴展以提供更多的API。這些擴展通常用C語言編寫,並在安裝時與PHP可執行文件一起編譯。一些擴展只能通過重新編譯帶附加標誌的PHP來添加,其他擴展只能通過PHP安裝進行編譯並在事後通過配置文件激活。 PHP提供了PEAR和PECL方面的項目,以標準化並簡化這種事後安裝。 Userland PHP代碼通常還會包含額外的第三方庫,只需使用PHP代碼編寫。 C擴展的優勢在於它們的執行速度和低級系統訪問,用戶級代碼庫的優勢在於它們的微不足道。如果您正在管理您自己的PHP安裝,那麼添加新的PHP擴展通常很簡單;然而,在非常受歡迎的共享主機模型中,主機想要安裝的內容與開發人員需要的內容之間經常存在緊張關係。
實際上PHP編寫的Web服務的第三方網站的服務器上運行,很多時候的Apache,它處理任何傳入的請求,並調用與給定的要求PHP源代碼文件作爲參數PHP解釋器,然後提供的任何輸出處理返回到HTTP客戶端。這也意味着沒有持續運行的PHP進程始終處於持久狀態,就像Java通常所做的那樣,但是每個請求都是通過啓動然後拆除新的PHP實例來處理的。
雖然Java只是將持久數據保存在內存中,但PHP中請求之間的數據持久性通過許多方法處理,如memcache,會話,數據庫,文件等;取決於具體情況的具體需要。 PHP確實有操作碼緩存插件,像Java字節碼這樣的工作,簡單地說,PHP不必每次執行相同的文件就重複相同的分析和編譯過程。
請記住,編寫一個像Java一樣運行的持久性PHP程序是完全可行的,它不是PHP的默認工作方式。就我個人而言,我非常喜歡爲Gearman或ZMQ上持久運行的特定任務編寫工作人員,並且在Web服務器上運行一些臨時腳本作爲「前端」,根據需要委派工作給這些工作人員。
如果這聽起來像一個典型的PHP應用程序更多的是粘在一起的幾個不同組件的積累,你會是正確的。除了像RDBMS服務器這樣的外部產品外,Java相當獨立。另一方面,PHP通常傾向於依賴一堆第三方產品;從某種意義上說,它可以發揮其優勢,因爲您可以針對特定任務使用同類最佳產品,但還需要處理不同系統的更多開銷。
幾乎是虛擬機和編譯的...解釋。 Web服務器體系結構取決於Web服務器,這裏不是語言特定的 –
http://stackoverflow.com/questions/2720488/how-exactly-is-a-php-script-executed – cerkiewny
有點偏離主題,但如果你從PHP開始,我會建議你[phptherightway](http://www.phptherightway.com/)作爲一個非常有用的資源,以便如何正確開始。 – mTorres