在 PHP 專案中引入檔案時,使用相對路徑容易因執行入口不同而失效。掌握取得「網站根目錄」與「當前腳本目錄」的可靠方法,能避免部署上線時的路徑錯誤。
$webRoot = $_SERVER['DOCUMENT_ROOT'];
// 適用:直接對應虛擬主機設定的 DocumentRoot
// 注意:CLI 模式下不可用
PHP 5.3+ 可直接使用魔術常數 __DIR__,等同 dirname(__FILE__)。
// 引入同目錄下的檔案
include_once __DIR__ . '/config.php';
// 專案根目錄常見做法:假設此檔案在 /app/bootstrap.php
define('APP_ROOT', dirname(__DIR__)); // 往上一層
include_once APP_ROOT . '/vendor/autoload.php';
<?php
// 統一路徑分隔符為 /,兼容 Windows 與 Linux
define('BASE_PATH', rtrim(str_replace('\\', '/', realpath(__DIR__ . '/')), '/') . '/');
echo BASE_PATH; // 輸出範例:/var/www/html/ 或 E:/www/project/
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$scriptName = $_SERVER['SCRIPT_NAME'];
$baseUrl = $protocol . '://' . $host . dirname($scriptName) . '/';
echo $baseUrl; // 例:https://example.com/project/
\,Linux/macOS 使用 /。PHP 內建函數多接受 /,建議統一用 DIRECTORY_SEPARATOR 常數或手動 str_replace('\\', '/', $path)。$_SERVER['DOCUMENT_ROOT'] 不存在,務必使用 __DIR__ 為基準。index.php)定義 ROOT_PATH、APP_PATH 等常數。include/require 使用絕對路徑常數拼接。$baseUrl 變數輸出。