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

PHP 定義專案根目錄常數的最佳實踐:realpath + dirname 兼容跨平台

     編輯:PHP 綜合知識

推薦寫法

<?php
// 入口檔案 (index.php) 或共用設定檔
define('BASE_PATH', str_replace('\\', '/', realpath(dirname(__FILE__) . '/../')));
?>

逐層解析

  1. __FILE__:當前檔案絕對路徑
  2. dirname(__FILE__):當前檔案所在目錄
  3. ... . '/../':往上一層 (專案根目錄)
  4. realpath():解析相對路徑、符號連結,回傳標準化絕對路徑
  5. str_replace('\\', '/', ...):Windows 反斜線統一為正斜線,跨平台相容

常見變體

<?php
// PHP 5.3+ 可用 __DIR__ 替代 dirname(__FILE__)
define('BASE_PATH', str_replace('\\', '/', realpath(__DIR__ . '/../')));

// 若入口檔即在根目錄
define('BASE_PATH', str_replace('\\', '/', realpath(__DIR__)));

// 子目錄再往上兩層
define('BASE_PATH', str_replace('\\', '/', realpath(__DIR__ . '/../../')));
?>

使用範例

<?php
require BASE_PATH . '/config/database.php';
include BASE_PATH . '/lib/functions.php';
// Windows: D:/www/project/
// Linux:   /var/www/project/
?>

為何不直接用 $_SERVER['DOCUMENT_ROOT']?

  • 虛擬主機/子目錄部署時 DOCUMENT_ROOT 指向公開目錄,非專案根目錄
  • CLI 模式下 $_SERVER['DOCUMENT_ROOT'] 不存在
  • BASE_PATH 由檔案位置決定,不受 Web 伺服器配置影響
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved