I have seen this:
<?php
include( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my_file.php');
?>
Why would I ever need to do this? Why would I go to the trouble of getting the dirname and then concatenating that with a directory separator, and a new filename?
Is the code above not equivalent to this:
<?php
include( 'my_file.php' );
?>
??
The PHP doc says,
Files are included based on the file path given or, if none is given, the include_path specified. If the file isn’t found in the include_path, include() will finally check in the calling script’s own directory and the current working directory before failing. The include() construct will emit a warning if it cannot find a file; this is different behavior from require(), which will emit a fatal error.
Let’s say I have a (fake) directory structure like:
Now assume that
bootstrap.phphas some code included for setting up database connections or some other kind of boostrapping stuff.Assume you want to include a file in
boostrap.php‘s folder calledinit.php. Now, to avoid scanning the entire include path withinclude 'init.php', you could useinclude './init.php'.There’s a problem though. That
./will be relative to the script that includedbootstrap.php, notbootstrap.php. (Technically speaking, it will be relative to the working directory.)dirname(__FILE__)allows you to get an absolute path (and thus avoid an include path search) without relying on the working directory being the directory in whichbootstrap.phpresides.(Note: since PHP 5.3, you can use
__DIR__in place ofdirname(__FILE__).)Now, why not just use include
'init.php';?As odd as it is at first though,
.is not guaranteed to be in the include path. Sometimes to avoid uselessstat()‘s people remove it from the include path when they are rarely include files in the same directory (why search the current directory when you know includes are never going to be there?).Note: About half of this answer is address in a rather old post: What's better of require(dirname(__FILE__).'/'.'myParent.php') than just require('myParent.php')?