Ответ 1
__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
:
CLI SAPI делает - вопреки другим SAPI - НЕ автоматически меняет текущий рабочий каталог на тот, в котором находится запущенный script.
Так вот:
[email protected] /home/thom $ echo "<?php echo getcwd() . '\n' ?>" >> test.php
[email protected] /home/thom $ php test.php
/home/thom
[email protected] /home/thom $ cd ..
[email protected] /home $ php thom/test.php
/home
Конечно, см. также руководство по http://php.net/manual/en/function.getcwd.php
UPDATE. С PHP 5.3.0 вы также можете использовать магическую константу __DIR__
, которая эквивалентна dirname(__FILE__)
.