在專案架構中,常需引入同目錄或子目錄下的類別檔、設定檔。若使用相對路徑 include 'config.php',執行腳本若在不同目錄下,便會發生「找不到檔案」錯誤。解決之道是以目前執行檔案的絕對目錄為基準,動態建構引入路徑。
dirname(__FILE__) 或 __DIR____FILE__:魔術常數,回傳目前檔案的完整絕對路徑(含檔名)。dirname(__FILE__):取得目前檔案所在的目錄路徑。__DIR__,等同於 dirname(__FILE__),更簡潔高效。<?php
// 取得目前檔案所在目錄
$currentDir = __DIR__; // 或 dirname(__FILE__)
// 引入同層檔案
include $currentDir . '/functions.php';
include $currentDir . '/classes.php';
// 引入子目錄檔案
include $currentDir . '/lib/Database.php';
include $currentDir . '/../config/app_config.php'; // 上層目錄
?>
PHP 的相對路徑是相對於進入點腳本(如 index.php),而非目前正在執行的 include 檔案。若 A include B,B 再 include C,B 使用相對路徑找 C 時,基準仍是 A 所在目錄,導致路徑錯誤。使用 __DIR__ 則永遠以 B 自身位置為準,消除此類問題。
若專案已使用 Composer,建議採用 PSR-4 自動載入,完全避免手寫 include/require,只需在類別中 use 對應命名空間即可。
__DIR__ (或 dirname(__FILE__)) 作為路徑基準。DIRECTORY_SEPARATOR 或統一正斜線 /(PHP 在 Windows 也支援)。