| 類型 | 格式 | 範例 | 解析基準 |
|---|---|---|---|
| 相對路徑 | 以 . 開頭 | ./a.php, ../config.php | **腳本執行入口檔案所在目錄**(無論包含巢狀深度) |
| 絕對路徑 | 以 / 或盤符開頭 | /var/www/a.php, C:/www/a.php | 直接定位檔案系統,不受任何參考目錄影響 |
| 未確定路徑 | 不以 .、/、盤符開頭 | a.php, lib/config.php | 先搜尋 include_path,再搜尋**執行 require 語句的檔案所在目錄** |
假設入口 A.php 在 /app/test/:
A.php: require './b/b.php'; // 載入 /app/test/b/b.php
B.php: require './c.php'; // 載入 /app/test/c.php (非 /app/test/b/c.php)
所有相對路徑**永遠以入口檔目錄為基準**,這是最常見的誤區。
__DIR__ 魔術常數// B.php 內
require __DIR__ . '/c.php'; // 永遠載入 B.php 同目錄下的 c.php
require __DIR__ . '/../c.php'; // 永遠載入 B.php 上層目錄的 c.php
require __DIR__ . '/sub/c.php'; // 永遠載入 B.php 同層 sub/ 目錄下的 c.php
__DIR__(等同 dirname(__FILE__))在編譯期解析為**該檔案所在目錄的絕對路徑**,與是否被包含無關,極其可靠。
include_path(php.ini 或 set_include_path() 設定),拼接路徑查找。行為不直觀,強烈建議**避免使用**。
__DIR__ 建構絕對路徑// config/bootstrap.php
define('APP_ROOT', __DIR__ . '/../');
// 其他檔案
require APP_ROOT . 'lib/Database.php';
// composer.json
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
// 入口檔唯一 require
require __DIR__ . '/vendor/autoload.php';
類別對應檔案路徑,零配置、效能佳、符合 PSR-4 標準。
import() 輔助函式(舊專案相容)function import($path) {
$old = getcwd();
chdir(dirname(__FILE__));
require_once $path;
chdir($old);
}
// 使用
import('../lib/Helper.php'); // 以 import 所在檔案為基準
require。__DIR__ 絕對路徑。allow_url_include 提升安全性。