In PHP what is the difference between
getcwd() dirname(__FILE__) They both return the same result when I echo from CLI
echo getcwd()."\n"; echo dirname(__FILE__)."\n"; Returns:
/home/user/Desktop/testing/ /home/user/Desktop/testing/ Which is the best one to use? Does it matter? What to the more advanced PHP developers prefer?
__DIR__ : The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__) . This directory name does not have a trailing slash unless it is the root directory.
The getcwd() function in PHP is an inbuilt function which is used to return the current working directory. This function does not accepts any parameter and returns the current working directory on successful function call or FALSE on failure.
__FILE__ is a magic constant containing the full path to the file you are executing. If you are inside an include, its path will be the contents of __FILE__.
So with this setup:
/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"; You get this output:
/folder/random /folder/random ------- /folder/random /folder/random/bar So getcwd() returns the directory where you started executing, while dirname(__FILE__) is file-dependent.
On my webserver, getcwd() returns the location of the file that originally started executing. Using the CLI it is equal to what you would get if you executed pwd. This is supported by the documentation of the CLI SAPI and a comment on the getcwd manual page:
the CLI SAPI does - contrary to other SAPIs - NOT automatically change the current working directory to the one the started script resides in.
So like:
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 Of course, see also the manual at http://php.net/manual/en/function.getcwd.php
UPDATE: Since PHP 5.3.0 you can also use the magic constant __DIR__ which is equivalent to dirname(__FILE__).
Try this.
Move your file into another directory say testing2.
This should be the result.
/home/user/Desktop/testing/ /home/user/Desktop/testing/testing2/ I would think getcwd is used for file operations, where dirname(__FILE__) uses the magic constant __FILE__ and uses the actual file path.
Edit: I was wrong.
Well you can change the working directory, with chdir.
So if you do that...
chdir('something'); echo getcwd()."\n"; echo dirname(__FILE__)."\n"; Those should be different.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With