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

PHP 獲取當前腳本所在目錄:getcwd() 與 dirname(__FILE__) 差異詳解

     編輯:PHP 綜合知識

兩大核心方法對比

方法返回值受影響因素典型用途
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>"; // 不變

實戰最佳實踐

  1. 項目入口文件定義根目錄常量:
    // public/index.php
    define('ROOT_PATH', __DIR__ . '/../'); // 或 dirname(__DIR__)
    require ROOT_PATH . 'vendor/autoload.php';
  2. 類庫內部引用資源文件:
    class Config {
        public static function load($file) {
            return include __DIR__ . "/../config/{$file}.php";
        }
    }
  3. CLI 命令處理相對路徑參數:
    $inputFile = $argv[1];
    $absolutePath = getcwd() . DIRECTORY_SEPARATOR . $inputFile;

避坑指南

  • __FILE__ 在 eval() 中返回 eval()'d code,dirname 會報錯,請用 __DIR__ 並做異常捕獲。
  • 符號鏈接(symlink)場景下,__DIR__ 返回鏈接目標真實路徑,若需鏈接路徑請用 dirname($_SERVER['SCRIPT_FILENAME'])。
  • Windows 路徑分隔符為 \,跨平台請用 DIRECTORY_SEPARATOR 或統一轉換為 /(PHP 內部支持正斜槿)。

結語

原則:文件內部定位用 __DIR__,進程工作基準用 getcwd()。現代框架(Laravel/Symfony/ThinkPHP)均在入口文件以 __DIR__ 確立項目根路徑,建議項目代碼統一遵循此約定。

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