What does the dot-slash do to PHP include calls?
The first version forces the internal mechanism to include files relatively to the... directly executed file. So for example you have
index.php
// directly executed script (php -f index.php or from a browser)
include 'second.php';
second.php
// This is included relatively to index.php
// Actually, it is first searched relatively to include_path, then relatively
// to index.php
include './third.php';
third.php
// This is included relatively to second.php ONLY. It does not search
// include_path
return "foo";
The Short Answer
You're right, it's not up one directory. A .
refers to the directory you're in, and ..
refers to the parent directory.
Meaning, ./file.php
and file.php
are functionally equivalent in PHP. Here's the relavent page of documentation:
http://us.php.net/manual/en/wrappers.file.php
The Longer Answer
However, just because they work the same in this context doesn't mean they're always the same.
When you're operating in a *nix shell environment, and you type the name of an executable file, the shell will look in the PATH
directories, but it won't look in the CWD
, or the directory you're currently in.
So, if you're in a directory that has a file called: myprogram.php
(this would be a PHP CLI file) and you just type:
myprogram.php
it doesn't matter if your program is executable or not. The shell will look in /bin/
, /usr/bin/
, etc. for your file, but it won't look in ./
: the directory you're in.
To execute that program without adding your directory to the PATH, you need to type
./myprogram
So really, ./
is more explicit. It means, "the file you're looking for HAS to be right here" and lack of ./
means, "the file should be somewhere the program is looking for files".
./
is the current directory. It is largely the same as just file.php
, but in many cases (this one included) it doesn't check any standard places PHP might look for a file, instead checking only the current directory.
From the PHP documentation (notice the last sentence):
Files for including are first looked for in each include_path entry relative to the current working directory, and then in the directory of current script. E.g. if your include_path is libraries, current working directory is /www/, you included include/a.php and there is include "b.php" in that file, b.php is first looked in /www/libraries/ and then in /www/include/. If filename begins with ./ or ../, it is looked only in the current working directory.