Разница между getcwd () и dirname (__ FILE__)? Что я должен использовать?

В PHP какая разница между

getcwd() dirname(__FILE__) 

Они оба возвращают тот же результат, когда я эхо от CLI

 echo getcwd()."\n"; echo dirname(__FILE__)."\n"; 

Возвращает:

 /home/user/Desktop/testing/ /home/user/Desktop/testing/ 

Какой из них лучше всего использовать? Это имеет значение? Что предпочитают более продвинутые разработчики PHP?

Solutions Collecting From Web of "Разница между getcwd () и dirname (__ FILE__)? Что я должен использовать?"

__FILE__ – волшебная константа, содержащая полный путь к исполняемому файлу. Если вы находитесь внутри include, его путь будет содержать содержимое __FILE__ .

Итак, с этой настройкой:

/folder/random/foo.php

 <?php echo getcwd() . "\n"; echo dirname(__FILE__) . "\n" ; echo "-------\n"; include 'bar/bar.php'; 

/folder/random/bar/bar.php

 <?php echo getcwd() . "\n"; echo dirname(__FILE__) . "\n"; 

Вы получаете этот результат:

 /folder/random /folder/random ------- /folder/random /folder/random/bar 

Таким образом getcwd() возвращает каталог, в котором вы начали выполнение, тогда как dirname(__FILE__) зависит от файла.

На моем веб-сервере getcwd() возвращает местоположение файла, который изначально запускался. Используя CLI, он равен тому, что вы получили бы, если бы вы выполнили pwd . Это подтверждается документацией CLI SAPI и комментарием на getcwd руководства getcwd :

CLI SAPI – вопреки другим SAPI – НЕ автоматически меняет текущий рабочий каталог на тот, в котором находится запущенный скрипт.

Так вот:

 thom@griffin /home/thom $ echo "<?php echo getcwd() . '\n' ?>" >> test.php thom@griffin /home/thom $ php test.php /home/thom thom@griffin /home/thom $ cd .. thom@griffin /home $ php thom/test.php /home 

Конечно, см. Также руководство по адресу http://php.net/manual/en/function.getcwd.php

UPDATE : Начиная с PHP 5.3.0 вы также можете использовать магическую константу __DIR__ которая эквивалентна dirname(__FILE__) .

Попробуй это.

Переместите файл в другой каталог, скажем, testing2 .

Это должно быть результатом.

 /home/user/Desktop/testing/ /home/user/Desktop/testing/testing2/ 

Я бы подумал, что getcwd используется для файловых операций, где dirname(__FILE__) использует магическую константу __FILE__ и использует фактический путь к файлу.


Изменить: я был неправ.

Ну, вы можете изменить рабочий каталог, с chdir .

Так что если вы это сделаете …

 chdir('something'); echo getcwd()."\n"; echo dirname(__FILE__)."\n"; - chdir('something'); echo getcwd()."\n"; echo dirname(__FILE__)."\n"; 

Это должно быть иначе.

Если вы вызываете файл из командной строки, разница становится ясной.

 cd foo php bin/test.php 

в test.php getcwd() вернет foo (ваш текущий рабочий каталог) и dirname(__FILE__) будет возвращать bin (dirname исполняемого файла).