getcwd() 和 dir 的主要區(qū)別在于:getcwd() 返回 php 腳本執(zhí)行時(shí)的當(dāng)前工作目錄,而 dir 返回的是當(dāng)前腳本所在的目錄。1. getcwd() 獲取的是當(dāng)前 php 進(jìn)程的工作目錄,這個(gè)目錄可以通過 chdir() 動(dòng)態(tài)改變;2. dir 是魔術(shù)常量,返回腳本所在目錄,靜態(tài)且編譯時(shí)確定。例如,在 index.php 中使用 chdir(‘includes’) 改變工作目錄后,getcwd() 返回的是 /var/www/html/includes,而 dir 返回的是 /var/www/html;3. 在 config.php 中,__dir__ 指向其所在目錄 /var/www/html/includes。選擇依據(jù):需要?jiǎng)討B(tài)路徑時(shí)使用 getcwd(),如日志記錄或命令行工具獲取執(zhí)行目錄;需要腳本所在絕對(duì)路徑時(shí)使用 dir__,如文件包含更穩(wěn)妥。注意事項(xiàng):getcwd() 可能受權(quán)限影響返回 false,__dir 更可靠且不受工作目錄變化影響。
getcwd() 和 __DIR__,都是PHP里用來獲取目錄路徑的,但它們之間可不是簡單的“殊途同歸”。用錯(cuò)了,輕則路徑不對(duì),重則程序跑飛。
getcwd() 獲取的是當(dāng)前PHP進(jìn)程的工作目錄,這個(gè)目錄是可以動(dòng)態(tài)變化的。__DIR__ 則是一個(gè)魔術(shù)常量,它返回的是當(dāng)前腳本所在的目錄,這個(gè)是靜態(tài)的,編譯時(shí)就確定了。
getcwd() 和 __DIR__ 的主要區(qū)別在于:getcwd() 返回的是 PHP 腳本執(zhí)行時(shí)的當(dāng)前工作目錄,而 __DIR__ 返回的是包含當(dāng)前腳本文件的目錄。
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
如何選擇:getcwd() 還是 __DIR__?
這其實(shí)取決于你的需求。
- 需要的是動(dòng)態(tài)路徑? 比如,你的腳本可能通過 chdir() 改變了工作目錄,那你肯定要用 getcwd()。
- 需要的是腳本文件所在的絕對(duì)路徑? 那就毫不猶豫地選擇 __DIR__。
舉個(gè)例子,假設(shè)你有這樣一個(gè)目錄結(jié)構(gòu):
/var/www/html/ ├── index.php └── includes/ └── config.php
index.php 的內(nèi)容是:
<?php chdir('includes'); echo 'getcwd(): ' . getcwd() . PHP_EOL; echo '__DIR__: ' . __DIR__ . PHP_EOL; require_once __DIR__ . '/config.php'; ?>
config.php 的內(nèi)容是:
<?php echo 'config.php __DIR__: ' . __DIR__ . PHP_EOL;
如果你在 /var/www/html/ 目錄下運(yùn)行 index.php,你會(huì)得到這樣的輸出:
getcwd(): /var/www/html/includes __DIR__: /var/www/html config.php __DIR__: /var/www/html/includes
看到了嗎?getcwd() 反映了 chdir() 帶來的變化,而 __DIR__ 始終指向腳本所在的目錄。config.php 里的 __DIR__ 也指向了它所在的目錄。
實(shí)際應(yīng)用場景:getcwd() 和 __DIR__ 的最佳實(shí)踐
- 文件包含: 使用 __DIR__ 來構(gòu)建包含文件的絕對(duì)路徑,可以避免因工作目錄變化導(dǎo)致的文件找不到的問題。比如,require_once __DIR__ . ‘/config.php’; 這種寫法就非常穩(wěn)妥。
- 日志記錄: 如果你的日志文件需要根據(jù)當(dāng)前工作目錄來存放,那 getcwd() 就派上用場了。
- 命令行工具: 在開發(fā)命令行工具時(shí),getcwd() 可以用來獲取用戶當(dāng)前執(zhí)行命令的目錄。
容易踩的坑:getcwd() 的權(quán)限問題
需要注意的是,getcwd() 依賴于 PHP 進(jìn)程的權(quán)限。如果 PHP 進(jìn)程沒有讀取當(dāng)前工作目錄的權(quán)限,getcwd() 可能會(huì)返回 false。
深入思考:getcwd() 和 $_SERVER[‘DOCUMENT_ROOT’] 的區(qū)別
$_SERVER[‘DOCUMENT_ROOT’] 通常指向 Web 服務(wù)器的文檔根目錄,而 getcwd() 指向 PHP 腳本執(zhí)行時(shí)的當(dāng)前工作目錄。這兩個(gè)變量的含義不同,應(yīng)用場景也不同。
$_SERVER[‘DOCUMENT_ROOT’] 通常用于構(gòu)建相對(duì)于網(wǎng)站根目錄的路徑,而 getcwd() 則用于獲取 PHP 腳本執(zhí)行時(shí)的實(shí)際工作目錄。在大多數(shù)情況下,使用 __DIR__ 來構(gòu)建文件路徑更加可靠,因?yàn)樗皇芄ぷ髂夸浀挠绊憽?/p>