Apatch 與 PHP 的運作原理

博大精深。

簡述 Apatch

我們用的 XAMPP 是 Base on「Apatch」這個伺服器的。所以在執行 php 的實際流程是這樣:

1
request => Apatch => php => output => Apatch => response

參考精美的圖:

flow

用文字說明的話是這樣:

  1. 發一個 request 到 Apatch
  2. Apatch 收到 request,丟給指定的檔案處理(例如 index.php)
  3. index.php 執行完後得到 output(例如 index.html),丟回去給 Apatch
  4. Apatch 再把 output 當作 response 丟回去

重點就是如果沒有 Apatch 你就拿不到任何 response,因為沒有人來處理你的 request。

簡述 PHP

PHP 就是一個「超文字(Hyper Text)」預處理器,跟 HTML 的差別在於他可以是「動態的」。

總之呢,PHP 就是用程式來幫你產出一個 HTML 檔案(或也有可能是其他檔案),每一次的結果不一定會一樣,因為內容是動態產生的。

假設我寫了一個 PHP 長這樣:

1
2
3
4
5
6
7
// peanu.php
<?php
$age = 23;
$name = 'PeaNu';
echo 'Hello, ' . 'I\'m ' . $name . '<br>';
echo 'I am ' . $age . 'years old.';
?>

我可以在 CLI 上執行:

1
php peanu.php

就會得到:

1
Hello, I'm PeaNu<br>I am 23years old.

備註:記住這裡不是瀏覽器,所以 <br> 才沒有被解析成你熟悉的那個換行。

這個就是「PHP 的輸出結果」,同時也是 Apatch 要當作 response 的東西。

所以如果沒有 PHP 會怎樣?你一樣會拿到 response,但拿到的是沒有處理過的原始碼

1
2
3
4
5
6
<?php
$age = 23;
$name = 'PeaNu';
echo 'Hello, ' . 'I\'m ' . $name . '<br>';
echo 'I am ' . $age . 'years old.';
?>

以上就是 PHP 所扮演的角色。

總結

所以你可以把 Apatch 想成是幫你把 request 丟給指定的 handler 處理,最後得到結果後在把 response 給你。

用程式來寫的話可能就長這樣:

1
2
3
4
5
6
7
8
9
function sever(request) {
// 把 request 丟給 xxx.php 處理
const response = php(request)
// 把 php 的 output 當作 response
return response
}

// 對 server 發出 request
sever(index.php)

最後不要忘了:

Server 其實只是一個程式,只是它是用來處理 request 的程式。

其他補充

  1. 一個 request 要丟給誰處理都是由 server 來決定,它想丟給誰就丟給誰。但我們用的 XAMPP 預設是由「檔案路徑」來決定要丟給誰。總之呢,這個規則是可以改的,不是一定要照這個規則。
PHP 基礎 mentor-program-day48
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×