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

PHP 獲取當前目錄、上級目錄、項目根目錄、腳本所在目錄完整區分

     編輯:PHP 相關知識

PHP 目錄路徑獲取完全指南:區分「當前工作目錄」、「腳本所在目錄」、「項目根目錄」

PHP 中 __DIR__、__FILE__、getcwd()、$_SERVER['DOCUMENT_ROOT']、realpath() 易混淆。本文逐一釐清適用場景與差異。

核心常量與函數對比

表達式含義受 Include 影響?典型值示例
__DIR__當前**腳本文件**所在目錄 (編譯時確定)否/var/www/project/src/Controller
dirname(__FILE__)同上 (PHP 5.2-)否/var/www/project/src/Controller
__FILE__當前腳本文件完整路徑否/var/www/project/src/Controller/User.php
getcwd()**當前工作目錄** (執行腳本入口目錄,CLI 為 cd 目錄,Web 為入口腳本目錄)是/var/www/project/public
realpath('.')同 getcwd(),解析符號鏈接是/var/www/project/public
realpath('..')工作目錄的上級目錄是/var/www/project
$_SERVER['DOCUMENT_ROOT']Web 服務器配置的**網站根目錄** (Nginx root / Apache DocumentRoot)否/var/www/project/public
pathinfo(__FILE__, PATHINFO_DIRNAME)同 __DIR__否/var/www/project/src/Controller

關鍵場景實戰

1. 引入配置文件 (相對腳本穩定)

// config.php 在項目根目錄
require __DIR__ . '/../../config.php'; // 即使被不同深度文件 include 也準確

2. 讀取上傳文件 (相對工作目錄/項目根目錄)

// 入口 public/index.php 中
$uploadDir = $_SERVER['DOCUMENT_ROOT'] . '/../storage/uploads'; // 固定項目結構
// 或
$baseDir = dirname(__DIR__); // public/ 父目錄 = 項目根目錄
$uploadDir = $baseDir . '/storage/uploads';

3. CLI 腳本中讀取同目錄資源

// cron.php 在 /var/www/project/scripts/
$dataFile = __DIR__ . '/data.csv'; // 穩定
// getcwd() 取決於 crontab 執行目錄,不可靠

4. 兼容舊代碼獲取腳本目錄

$scriptDir = dirname($_SERVER['SCRIPT_FILENAME']); // 入口腳本目錄 (如 public/index.php)
$currentScriptDir = dirname(__FILE__); // 當前被執行文件目錄 (可能是 include 文件)

最佳實踐建議

  • **庫/類/配置引入**:統一用 __DIR__ 相對路徑,不依賴工作目錄。
  • **公開資源 (上傳、緩存、日誌)**:基於 $_SERVER['DOCUMENT_ROOT'] 或項目根目錄常量 (框架通常定義 BASE_PATH)。
  • **CLI 入口**:在入口文件定義 define('ROOT_PATH', __DIR__ . '/..'); 供全局使用。
  • **避免**:直接用 ./relative/path、getcwd() 拼接業務路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved