首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 取得當前檔案絕對路徑:dirname(__FILE__) 完整用法

     編輯:PHP 綜合知識

核心常數與函式

  • __FILE__:當前執行腳本的完整絕對路徑 (含檔名),符號連結已解析。
  • __DIR__ (PHP 5.3+):等同 dirname(__FILE__),直接取得目錄路徑。
  • dirname(string $path, int $levels = 1):PHP 7.0+ 支援第 2 參數直接取上 N 層目錄。

基本範例

假設檔案位於 D:\www\project\src\config.php:

echo __FILE__;                    // D:\www\project\src\config.php
echo __DIR__;                     // D:\www\project\src
echo dirname(__FILE__);           // D:\www\project\src
echo dirname(__DIR__);            // D:\www\project
echo dirname(__FILE__, 2);        // D:\www\project (PHP 7.0+)
echo dirname(dirname(__FILE__));  // D:\www\project (舊寫法)

常見應用場景

1. 載入設定檔 / 核心類別

require_once __DIR__ . '/../vendor/autoload.php';
require_once dirname(__DIR__) . '/config/database.php';

2. 定義專案根目錄常數

define('ROOT_PATH', dirname(__DIR__));
define('CONFIG_PATH', ROOT_PATH . '/config');
define('PUBLIC_PATH', ROOT_PATH . '/public');

3. 跨平台路徑處理

// 使用 DIRECTORY_SEPARATOR 或直接用正斜線 (Windows 也支援)
$path = __DIR__ . '/../storage/logs/app.log';
$path = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'storage' . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . 'app.log';

效能與最佳實務

  • 絕對路徑優於相對路徑:避免 include_path 搜尋、chdir() 影響、符號連結解析開銷。
  • 優先使用 __DIR__:語意更清晰、少一次函式呼叫。
  • 避免在迴路中重複呼叫:定義常數或靜態變數快取。
  • Composer 專案:直接使用 vendor/autoload.php 產生的 ComposerAutoloaderInit 內部已處理路徑,無需手動 dirname。

常見誤區

誤區正確認知
dirname(__FILE__) 回傳含尾斜線不含尾斜線 (Windows 為 \,Linux 為 /),拼接時需自行加上
__FILE__ 在 include 檔案中指向主腳本永遠指向「目前正在執行的該檔案」,而非入口腳本
使用 $_SERVER['SCRIPT_FILENAME'] 替代該變數指向入口腳本,被 include 的檔案無法取得自身路徑

現代替代:__DIR__ + dirname(..., $levels)

// PHP 7.0+ 推薦寫法
$root = dirname(__DIR__, 3);  // 向上 3 層
$config = dirname(__DIR__, 2) . '/config';

比多層巢狀 dirname(dirname(...)) 更易讀、效能略優。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved