當多個頁面共用相同程式碼 (資料庫連線、頁首頁尾、函式庫、設定檔) 時,使用檔案包含可避免重複撰寫,維護時只需修改一處。
| 函式 | 處理階段 | 檔案不存在 | 重複包含 | 適用場景 |
|---|---|---|---|---|
include() | 執行時 | 發出警告,繼續執行 | 允許重複 | 動態內容、條件式包含、樣板檔案 |
include_once() | 執行時 | 發出警告,繼續執行 | 自動防止重複 | 函式庫、類別定義、避免重複宣告錯誤 |
require() | 編譯時 | 致命錯誤,腳本終止 | 允許重複 | 核心設定、必要元件、靜態內容 |
require_once() | 編譯時 | 致命錯誤,腳本終止 | 自動防止重複 | 類別檔案、介面定義、關鍵依賴 |
<!DOCTYPE html>
<html>
<head><title>網站標題</title></head>
<body>
<div id="content">主要內容區塊</div>
<footer>
<?php require __DIR__ . '/includes/copyright.php'; ?>
</footer>
</body>
</html>
copyright.php:
<?php // 必須包含 PHP 標籤,否則會直接輸出原始碼
echo '© 2024 My Website. All rights reserved.';
?>
<?php
include_once __DIR__ . '/lib/database.php';
include_once __DIR__ . '/lib/functions.php';
// 現在可以直接使用庫中的函式
$conn = db_connect();
$users = get_users($conn);
?>
<!DOCTYPE html>...
<?php
$template = isset($_GET['tpl']) ? $_GET['tpl'] : 'default';
$allowed = ['default', 'mobile', 'print'];
if (in_array($template, $allowed)) {
include "templates/{$template}.php";
} else {
include "templates/default.php";
}
?>
包含檔案會繼承呼叫處的變數作用域:
<?php
$var = '外部變數';
include 'inc.php'; // inc.php 內可直接存取 $var
?>
__DIR__ 魔術常數 (PHP 5.3+) 取得當前檔案目錄define('ROOT', __DIR__);require '/path/outside/webroot/config.php';.php 副檔名,並確保伺服器解析 PHP,防止直接訪問洩露原始碼require_once 在啟用快取時效能差異可忽略include/require