簡體   English   中英

PHP如何與Apache交互?

[英]How does PHP interface with Apache?

我幾乎已經完成了在Java下編寫符合HTTP / 1.0標准的Web服務器(沒有商業用途,這只是為了好玩),基本上我想要包含PHP支持。 我意識到這根本不是一件容易的事,但我認為這將是一項不錯的成就。

所以我想知道PHP如何與Apache Web服務器(或任何其他Web服務器)完全接口,因此我可以從中學習並編寫自己的PHP包裝器。 它不一定是mod_php,我不介意編寫FastCGI包裝器 - 據我所知,它也能運行PHP。

我認為所有PHP需要的是輸出到客戶端(因此它可以解釋PHP部分),來自客戶端的完整HTTP請求(因此它可以提取POST變量等)和客戶端的主機名。 然后,您只需獲取已解析的PHP代碼並將其寫入輸出流。 可能會有更多的東西,但實質上我會認為它的工作原理。

從我到目前為止收集的內容來看,apache2handler提供了一個API,PHP利用它來“連接”到Apache。 我想這是一個想法,看看apache2handler和php5apache2.dll左右的源代碼,但在我這樣做之前,我想我先問問。

如果有人有更多的信息,經驗或某種與此相關的規范,請告訴我。

提前致謝!

可以通過3種方式從Apache調用PHP:

1)作為一個模塊 - 這涉及將php解釋器與webserver發布的鈎子庫鏈接起來

2)CGI - Web服務器為每個請求啟動解釋器的實例,並通過stdin,命令行和環境變量將參數傳遞給解釋器,stdout發送到客戶端,stderr應寫入error_log

3)fastCGI - 這消除了為每個請求啟動新進程的開銷 - 解釋器作為守護進程運行

CGI是最簡單的實現,但不能擴展/表現良好,該模塊將是迄今為止最難的。 FastCGI幾乎與模塊方法一樣快。 CGI和fastCGI是開放的,記錄良好的API。

還有其他方法可以實現您的目標 - 例如Quercus

C。

簡而言之,這就是它的工作原理:

Apache通常通過獲取文件並沿HTTP連接發送流來提供文件。 但是,在PHP中,Apache獲取文件,將其傳輸到PHP二進制文件中,然后通過HTTP連接從命令發送輸出流。

除了php文件,HTTP請求和客戶端主機名之外,還有一些其他信息項通常傳遞給PHP以設置$_SERVER超全局的某些其他元素。 鏈接的文檔頁面包含通常設置的列表。

關鍵詞是CGI
它是一種非常簡單的協議,可以為Web服務器提供多年的服務。
它不是PHP與Web服務器交互的唯一方式,但最常見且易於實現。

簡而言之,您的服務器必須設置一些環境變量,然后調用一個cgi腳本,這只是一個php腳本本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM