Разница между getcwd() и __DIR__ в PHP

  • __DIR__ - глобальная константа доступная с PHP 5.3, содержит абсолютный путь к директории (папке) файла, в которой используется эта константа.

  • getcwd() - получает путь директории (папки) текущего выполняемого скрипта (из какой папки начал выполняться PHP процесс).

Рассмотрим на примере

У нас есть такая структура фалов:

folder/
	foo.php
	bar/
		bar.php

Код folder/foo.php:

<?php
var_dump( getcwd() );
var_dump( __DIR__ );

include 'bar/bar.php';

Код folder/bar/bar.php:

<?php
var_dump( getcwd() );
var_dump( __DIR__ );

Теперь, запустим файл foo.php по-разному:

Из папки /var/www/html:

kama@kama:/var/www/html $ php folder/foo.php
	string(13) "/var/www/html"
	string(20) "/var/www/html/folder"
	string(13) "/var/www/html"
	string(24) "/var/www/html/folder/bar"

Из папки /var/www/html/folder:

kama@kama:/var/www/html/folder $ php foo.php
	string(20) "/var/www/html/folder"
	string(20) "/var/www/html/folder"
	string(20) "/var/www/html/folder"
	string(24) "/var/www/html/folder/bar"

Как мы видим getcwd() возвращает каталог из которого PHP скрипт был запущен, тогда как __DIR__ всегда сореждит путь до папки в которой находится файл.

Для WordPress getcwd() почти всегда будет возвращать путь до папки где лежить основной файл index.php.

Исключения будут для админки, когда ядро WP перенесено в другую папку.