博大精深。
簡述 Apatch
我們用的 XAMPP 是 Base on「Apatch」這個伺服器的。所以在執行 php 的實際流程是這樣:
1 | request => Apatch => php => output => Apatch => response |
參考精美的圖:
用文字說明的話是這樣:
- 發一個 request 到 Apatch
- Apatch 收到 request,丟給指定的檔案處理(例如 index.php)
- index.php 執行完後得到 output(例如 index.html),丟回去給 Apatch
- Apatch 再把 output 當作 response 丟回去
重點就是如果沒有 Apatch 你就拿不到任何 response,因為沒有人來處理你的 request。
簡述 PHP
PHP 就是一個「超文字(Hyper Text)」預處理器,跟 HTML 的差別在於他可以是「動態的」。
總之呢,PHP 就是用程式來幫你產出一個 HTML 檔案(或也有可能是其他檔案),每一次的結果不一定會一樣,因為內容是動態產生的。
假設我寫了一個 PHP 長這樣:
1 | // peanu.php |
我可以在 CLI 上執行:
1 | php peanu.php |
就會得到:
1 | Hello, I'm PeaNu<br>I am 23years old. |
備註:記住這裡不是瀏覽器,所以 <br>
才沒有被解析成你熟悉的那個換行。
這個就是「PHP 的輸出結果」,同時也是 Apatch 要當作 response 的東西。
所以如果沒有 PHP 會怎樣?你一樣會拿到 response,但拿到的是沒有處理過的原始碼:
1 | <?php |
以上就是 PHP 所扮演的角色。
總結
所以你可以把 Apatch 想成是幫你把 request 丟給指定的 handler 處理,最後得到結果後在把 response 給你。
用程式來寫的話可能就長這樣:
1 | function sever(request) { |
最後不要忘了:
Server 其實只是一個程式,只是它是用來處理 request 的程式。
其他補充
- 一個 request 要丟給誰處理都是由 server 來決定,它想丟給誰就丟給誰。但我們用的 XAMPP 預設是由「檔案路徑」來決定要丟給誰。總之呢,這個規則是可以改的,不是一定要照這個規則。