__FILE__ 是 PHP 魔術常數,代表當前執行腳本的完絕對路徑。若在被 include 的檔案中使用,返回的是被包含檔案的路徑,而非入口檔案。
// 假設 __FILE__ = /home/web/config/config.php
echo __FILE__; // /home/web/config/config.php
echo dirname(__FILE__); // /home/web/config
echo dirname(dirname(__FILE__)); // /home/web (上兩層目錄)
echo basename(__FILE__); // config.php
傳統做法易受入口檔案位置影響,推薦向上查找標誌檔案的穩健寫法:
// 定義於共用設定檔
function get_project_root() {
$path = __DIR__; // PHP 5.3+ 推薦用 __DIR__ 替代 dirname(__FILE__)
while (!file_exists($path . '/composer.json') && $path !== '/') {
$path = dirname($path);
}
return $path;
}
define('ROOT_PATH', get_project_root());
define('CONFIG_PATH', ROOT_PATH . '/config');
define('PUBLIC_PATH', ROOT_PATH . '/public');
WP 封裝了針對插件/主題的路徑工具:
| 函式 | 輸出範例 | 用途 |
|---|---|---|
plugin_basename(__FILE__) | wp-smtp/wp_smtp_admin.php | 相對於 plugins 目錄的路徑 |
plugin_dir_url(__FILE__) | https://example.com/wp-content/plugins/wp-smtp/ | 插件 URL(含斜線) |
plugin_dir_path(__FILE__) | /var/www/wp-content/plugins/wp-smtp/ | 插件實體路徑(含斜線) |
plugins_url('img/icon.png', __FILE__) | https://example.com/wp-content/plugins/wp-smtp/img/icon.png | 生成插件資源完整 URL |
__DIR__,效能優於 dirname(__FILE__)DIRECTORY_SEPARATOR 常數