BLOG
網站專欄 Q & A
網站技術

PHP 是什麼?語法介紹、與 MySQL 互動、現況與適合的網站類型

PHP 是全球最多網站使用的伺服器端程式語言:WordPress、絕大多數電商套件與中小企業官網都跑在它上面,本站也是。它的語法簡單、改完存檔就能看結果,幾乎所有虛擬主機都內建支援,這三個特性讓它成為官網與內容型網站成本最低的選擇。這篇文章從 PHP 是什麼開始,整理基本語法、表單與 MySQL 互動的正確寫法、版本與現況,以及它適合與不適合的網站類型。本文屬於《網頁程式語言》系列,總覽見〈網頁程式設計是什麼〉。

PHP(Hypertext Preprocessor)示意圖:在伺服器端執行、動態產生 HTML 的程式語言

一、PHP 是什麼?

PHP(PHP: Hypertext Preprocessor)是一種在伺服器端執行、專為網頁開發設計的直譯式程式語言,程式寫在 <?php ?> 標籤內,執行結果以 HTML 送給瀏覽器。它由 Rasmus Lerdorf 於 1995 年發布,名稱原意是 Personal Home Page,後來改為現在的遞迴縮寫。

它的市占是所有伺服器端語言中最高的:依 W3Techs 的持續統計,在已知伺服器端語言的網站中,PHP 佔比長期超過七成,WordPress 一家就撐起全球超過四成的網站。這不代表 PHP 技術上最先進,而是它在「容易部署、容易找人、容易找主機」三件事上長期沒有對手。

二、PHP 怎麼運作?

瀏覽器請求 .php 檔時,網頁伺服器把檔案交給 PHP 直譯器執行,直譯器把 <?php ?> 裡的程式跑完、和外面的 HTML 合併,再把純 HTML 回傳。訪客永遠看不到 PHP 原始碼。

  • 不需要編譯:改完檔案重新整理就生效,這是初學者上手快的主因。
  • 執行方式:現代主機多用 PHP-FPM(FastCGI Process Manager)常駐處理請求,效能遠勝早期每次請求都啟動一個程序的 CGI 模式;CGI 是什麼、為何被取代,見〈CGI 是什麼〉。
  • 搭配環境:經典組合是 Linux、Apache 或 Nginx、MySQL 或 MariaDB 加 PHP,簡稱 LAMP 或 LEMP,幾乎所有虛擬主機都預裝好。

三、PHP 基本語法

PHP 的語法接近 C 與 JavaScript:大括號包區塊、每句以分號結尾、變數以 $ 開頭。以下範例存成 .php 放到主機就能執行。

1. Hello, World 與標籤

PHP
<?php
    echo "Hello, World!";
?>

純程式檔(不含 HTML)習慣只寫開頭 <?php、省略結尾標籤,避免結尾標籤後面多出的空白或換行被送到瀏覽器,造成「headers already sent」錯誤。

2. 變數與字串

PHP
<?php
    $name = "王小明";
    $age = 25;
    echo "姓名:" . $name . "<br>";   // 用 . 串接字串
    echo "年齡:{$age}";              // 雙引號字串可直接放變數

PHP 是弱型別,變數不必宣告型別,但 PHP 7 以後可以在函數參數與回傳值標註型別,讓錯誤在開發階段就被抓到。

3. 條件判斷

PHP
<?php
    $age = 18;
    if ($age >= 18) {
        echo "您已成年";
    } elseif ($age >= 12) {
        echo "您是青少年";
    } else {
        echo "您是兒童";
    }

比較時建議用 ===(同時比較值與型別),== 會做寬鬆轉型,"0" == false 這類結果常讓初學者困惑。

4. 迴圈與陣列

PHP
<?php
    for ($i = 1; $i <= 5; $i++) {
        echo "這是第 {$i} 次迴圈<br>";
    }

    $colors = ["紅", "綠", "藍"];
    foreach ($colors as $index => $color) {
        echo "{$index}:{$color}<br>";
    }

    $user = ["name" => "王小明", "email" => "ming@example.com"];   // 關聯陣列
    echo $user["email"];

PHP 的陣列同時扮演其他語言的清單與字典兩種角色,foreach 是走訪它們最常用的方式。

5. 函數

PHP
<?php
    function sayHello(string $name): string
    {
        return "Hello, " . $name;
    }
    echo sayHello("Alice");

範例標註了參數型別 string 與回傳型別 : string,這是現代 PHP 的建議寫法,Laravel 等框架的程式碼都這樣寫。

四、表單處理:先驗證、再輸出

PHP 用 $_POST$_GET 讀取表單資料,但任何來自使用者的資料都必須先驗證、輸出前再轉義。

PHP
<form method="post" action="">
    姓名:<input type="text" name="name"><br>
    <input type="submit" value="送出">
</form>
<?php
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        $name = trim($_POST["name"] ?? "");
        if ($name === "") {
            echo "請輸入姓名";
        } elseif (mb_strlen($name) > 50) {
            echo "姓名過長";
        } else {
            echo "您輸入的姓名是:" . htmlspecialchars($name, ENT_QUOTES, "UTF-8");
        }
    }
舊教材最常見的錯誤就是直接 echo $_POST['name']使用者若輸入一段 <script>,就會在頁面上被執行,這是跨站腳本(XSS)。htmlspecialchars() 把特殊字元轉成實體,是輸出使用者資料的最低標準。另外 $_SERVER['PHP_SELF'] 也不該直接放進 action,它可被網址注入內容;表單送回同一頁時 action="" 即可。

五、與 MySQL 互動:PDO 與預備語句

現代 PHP 連資料庫用 PDO 或 MySQLi,並一律使用預備語句(prepared statement)帶參數,不要把變數串進 SQL。

PHP(PDO)
<?php
    $dsn = "mysql:host=localhost;dbname=testdb;charset=utf8mb4";
    try {
        $pdo = new PDO($dsn, "dbuser", "dbpassword", [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        ]);
        $stmt = $pdo->prepare("SELECT id, name FROM users WHERE status = :status");
        $stmt->execute([":status" => 1]);
        foreach ($stmt as $row) {
            echo "ID:" . $row["id"] . ",名字:" . htmlspecialchars($row["name"]) . "<br>";
        }
    } catch (PDOException $e) {
        error_log($e->getMessage());
        echo "資料庫連線失敗,請稍後再試。";
    }
  • 為什麼用預備語句:參數與 SQL 分開送到資料庫,使用者輸入永遠不會被當成 SQL 執行,這是 OWASP 對 SQL 注入的首選防護。
  • 為什麼 charset 要 utf8mb4:舊的 utf8 存不了表情符號與部分罕見漢字,會出現亂碼或寫入失敗。
  • 錯誤訊息不要印給訪客:範例把詳細錯誤寫進伺服器日誌,畫面只顯示一句通用訊息,避免洩漏資料庫結構。
  • 不要再用 mysql_ 系列函數:它們在 PHP 7 已被移除,很多舊教材與舊網站還在用,是搬到新主機時最常見的白畫面原因。

六、版本與現況:PHP 8 之後

PHP 目前以 8 系列為主線,每年 11 月發布一個新版,每個版本提供兩年功能更新加額外的安全性更新,過期版本就不再修補漏洞。

  • PHP 5 與 7 全部過期:PHP 7.4 在 2022 年底結束支援,仍在跑 5.x 或 7.x 的網站沒有任何安全性修補,是主機商與 SEO 健檢時最常見的紅字。
  • PHP 8 帶來什麼:JIT 編譯、更嚴格的型別、具名參數、列舉(8.1)、唯讀屬性;效能較 7.x 明顯提升,語法也更接近現代語言。
  • 升級最常卡在哪:舊程式碼依賴已移除的函數、外掛未更新、對 null 與型別的寬鬆處理在 8 以後會拋錯。升級前先用本機環境跑一次錯誤日誌,比直接在主機切版本安全。
  • 生態:Laravel 與 Symfony 是主流框架,Composer 管理套件,WordPress、WooCommerce、Drupal 等內容管理系統都是 PHP 寫的。

確切的各版本支援日期以 PHP 官方的 Supported Versions 頁面為準,本文參考來源附連結。

七、PHP 適合與不適合的網站

  • 適合:企業官網、部落格與內容行銷網站、中小型電商、會員系統、需要後台的形象網站,尤其是預算有限、之後可能換維護廠商的專案。
  • 不特別適合:大量即時雙向連線的應用(聊天、協作工具,Node.js 更順手)、以資料科學與機器學習為核心的系統(Python 生態更齊)、必須與 .NET 或 Java 既有系統深度整合的企業內部系統。

其他語言的定位與比較表,統一放在〈網頁程式設計是什麼〉;Python 在網頁開發的角色與和 PHP 的差別,見〈Python 是什麼〉。

八、本站以 PHP 建置的實務心得

本站(newscan.com.tw)從建站至今都以 PHP 搭配 MySQL 開發,包含文章系統、詢價表單與後台。多年維運下來,幾件事值得分享給正在選語言的網站主:

  • 版本升級要排進年度工作:我們在網站健檢時把 PHP 版本列為必查項目,因為過期版本不只是效能問題,更是資安與主機商停止支援的問題。升級前在本機環境跑過一輪錯誤日誌,實際切換通常只需一個維護時段。
  • 共用程式集中管理:連線設定、標頭輸出、共用函式放在少數幾個 include 檔,改一處全站生效;這也讓後來加上結構化資料、noindex 控制這類 SEO 調整能在一個檔案完成。
  • PHP 對 SEO 沒有先天優劣:伺服器端輸出完整 HTML 反而利於索引;速度取決於快取、圖片與資料庫查詢,不取決於語言。網站速度的實作要點見〈網頁速度優化〉。

九、結論

PHP 是門檻最低、部署最容易、維護人選最多的伺服器端語言,代價是要自己養成驗證輸入、轉義輸出、用預備語句、按時升版的習慣。做到這四件事的 PHP 網站,安全性與效能都不輸其他語言。

學習順序建議:先把 HTML 與 JavaScript 基礎打好,再學 PHP 與 MySQL,最後進 Laravel 框架;每一步都能用最便宜的虛擬主機實際上線,這是 PHP 給初學者最大的優勢。

十、常見問答 FAQ

PHP 是什麼?
PHP(PHP: Hypertext Preprocessor)是在伺服器端執行、專為網頁開發設計的直譯式程式語言,程式寫在 <?php ?> 標籤內,執行結果以 HTML 送給瀏覽器,訪客看不到原始碼。它於 1995 年發布,依 W3Techs 統計在已知伺服器端語言的網站中佔比長期超過七成,WordPress、WooCommerce、Laravel 都以它為基礎。優勢是不需編譯、幾乎所有虛擬主機都內建、維護人選最多;目前以 PHP 8 系列為主線,每年更新一版。
PHP 現在還值得學嗎?
值得,尤其是以網站開發為目標的人。PHP 仍是市占最高的伺服器端語言,WordPress 生態、中小企業官網與電商套件的維護需求穩定,接案與就業機會多;PHP 8 帶來 JIT、嚴格型別與現代語法,Laravel 框架的開發體驗與其他語言的主流框架相當。它不適合的領域是資料科學、AI 與大量即時連線的應用,那些交給 Python 或 Node.js。學習成本低、能用最便宜的主機立刻上線,是它給初學者最大的優勢。
PHP 和 JavaScript 有什麼不同?
PHP 在伺服器執行,JavaScript 主要在瀏覽器執行,兩者是分工而非競爭。PHP 負責讀寫資料庫、處理表單、產生頁面 HTML;JavaScript 負責頁面載入後的互動,例如按鈕、驗證、不重新整理更新資料。一個典型的 PHP 網站一定也用到 JavaScript。JavaScript 透過 Node.js 也能寫後端,這時才會和 PHP 成為同一層的選擇,差別在生態:PHP 有 WordPress 與最普及的主機支援,Node.js 適合即時應用與前後端同語言的團隊。
PHP 網站安全嗎?
PHP 本身的安全性與其他主流語言相當,多數 PHP 網站被入侵的原因是寫法與維護問題,而不是語言缺陷。三個最常見的破口:把使用者輸入直接串進 SQL(應改用 PDO 或 MySQLi 的預備語句)、輸出使用者資料未轉義(應用 htmlspecialchars)、以及 PHP 版本或 WordPress 外掛長期不更新。只要做到參數化查詢、輸出轉義、驗證所有輸入、使用仍受支援的 PHP 版本並定期更新套件,PHP 網站的安全性沒有問題。
PHP 版本太舊該怎麼升級?
先在本機或測試環境安裝目標版本(建議直接用最新的 PHP 8 穩定版),跑一輪網站所有功能並觀察錯誤日誌,常見問題是使用了已移除的函數(例如 PHP 7 移除的 mysql_ 系列)、外掛或套件不支援新版、以及對 null 與型別更嚴格的檢查拋出錯誤。逐一修正後,再請主機商或在主機控制台切換版本,切換時段選在流量低點並先備份網站與資料庫。過期版本沒有安全性修補,升級不是可選項目,建議每年排入維護計畫。

參考來源

  1. PHP Group,〈PHP 手冊〉,PHP 官方文件。
  2. PHP Group,〈Supported Versions〉,PHP 官方支援時程。
  3. PHP Group,〈PDO 預備語句與儲存程序〉,PHP 官方文件。
  4. W3Techs,〈Usage statistics and market share of PHP for websites〉,W3Techs 持續統計。
  5. OWASP,〈SQL Injection Prevention Cheat Sheet〉,OWASP Cheat Sheet Series。
  6. 新視野網頁設計,〈網頁程式設計是什麼?前端、後端、程式語言選擇與學習路線〉,本站自有內容。

PHP 各版本支援期限以官方 Supported Versions 頁面為準;第八節為本站自身網站的維運經驗,不涉及客戶資料。

關於作者

內容揭露:本文由新視野網頁設計 SEO 團隊撰寫。文中連結的站內指南與延伸閱讀均為本站自有內容;新視野提供網頁設計與 SEO/AI SEO 服務,讀者在採用本文建議前請自行評估是否符合自身情況。文中引用的第三方研究與官方文件皆附可點擊出處,歡迎查證。

新視野網頁設計 SEO 團隊

新視野網頁設計自 2005 年起投入企業網站建置與搜尋行銷,服務範圍涵蓋 RWD 網站設計、技術 SEO、結構化資料佈署,以及 AI 搜尋時代的 AEO/GEO 內容優化。本文由新視野 SEO 團隊撰寫、審閱並持續維護更新。

服務據點:
台中(總公司)台中市南區忠明南路 758 號 21 樓 B4台北高雄
聯絡電話:
04-2260-1329
公司資訊:
關於我們公司位置線上詢價
對外平台:
FacebookLinkedIn
本站同主題內容:
網頁程式設計是什麼Python 是什麼JavaScript 語法介紹虛擬主機是什麼

歡迎推廣本文,請務必連結(LINK)本文出處:新視野網頁設計公司