| 方法 | 返回值 | 受影響因素 | 典型用途 |
|---|---|---|---|
getcwd() | 當前工作目錄(進程級) | CLI 下為執行命令的目錄;Web 下通常為網站根目錄,但可被 chdir() 改變 | CLI 腳本相對路徑解析、文件操作基準目錄 |
dirname(__FILE__)__DIR__ (PHP 5.3+) | 當前文件所在目錄(絕對路徑) | 不受工作目錄影響,包含文件時指向被包含文件目錄 | 引入配置/類庫、定位項目根目錄、構建絕對路徑 |
<?php
echo 'getcwd(): ' . getcwd() . "<br>";
echo 'dirname(__FILE__): ' . dirname(__FILE__) . "<br>";
echo '__DIR__: ' . __DIR__ . "<br>";
// 測試 chdir 影響
chdir('/tmp');
echo 'chdir 後 getcwd(): ' . getcwd() . "<br>";
echo 'chdir 後 __DIR__: ' . __DIR__ . "<br>"; // 不變
// public/index.php
define('ROOT_PATH', __DIR__ . '/../'); // 或 dirname(__DIR__)
require ROOT_PATH . 'vendor/autoload.php';
class Config {
public static function load($file) {
return include __DIR__ . "/../config/{$file}.php";
}
}
$inputFile = $argv[1];
$absolutePath = getcwd() . DIRECTORY_SEPARATOR . $inputFile;
__FILE__ 在 eval() 中返回 eval()'d code,dirname 會報錯,請用 __DIR__ 並做異常捕獲。__DIR__ 返回鏈接目標真實路徑,若需鏈接路徑請用 dirname($_SERVER['SCRIPT_FILENAME'])。\,跨平台請用 DIRECTORY_SEPARATOR 或統一轉換為 /(PHP 內部支持正斜槿)。原則:文件內部定位用 __DIR__,進程工作基準用 getcwd()。現代框架(Laravel/Symfony/ThinkPHP)均在入口文件以 __DIR__ 確立項目根路徑,建議項目代碼統一遵循此約定。