Get absolute path of initially run script
I have searched high and low and get a lot of different solutions and variables containing info to get the absolute path. But they seem to work under some conditions and not under others. Is there one silver bullet way to get the absolute path of the executed script in PHP? For me, the script will run from the command line, but, a solution should function just as well if run within Apache etc.
Clarification: The initially executed script, not necessarily the file where the solution is coded.
Solution 1:
__FILE__
constant will give you absolute path to current file.
Update:
The question was changed to ask how to retrieve the initially executed script instead of the currently running script. The only (??) reliable way to do that is to use the debug_backtrace
function.
$stack = debug_backtrace();
$firstFrame = $stack[count($stack) - 1];
$initialFile = $firstFrame['file'];
Solution 2:
echo realpath(dirname(__FILE__));
If you place this in an included file, it prints the path to this include. To get the path of the parent script, replace __FILE__
with $_SERVER['PHP_SELF']
. But be aware that PHP_SELF is a security risk!
Solution 3:
The correct solution is to use the get_included_files
function:
list($scriptPath) = get_included_files();
This will give you the absolute path of the initial script even if:
- This function is placed inside an included file
- The current working directory is different from initial script's directory
- The script is executed with the CLI, as a relative path
Here are two test scripts; the main script and an included file:
# C:\Users\Redacted\Desktop\main.php
include __DIR__ . DIRECTORY_SEPARATOR . 'include.php';
echoScriptPath();
# C:\Users\Redacted\Desktop\include.php
function echoScriptPath() {
list($scriptPath) = get_included_files();
echo 'The script being executed is ' . $scriptPath;
}
And the result; notice the current directory:
C:\>php C:\Users\Redacted\Desktop\main.php
The script being executed is C:\Users\Redacted\Desktop\main.php
Solution 4:
__DIR__
From the manual:
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.
__FILE__
always contains an absolute path with symlinks resolved whereas in older versions (than 4.0.2) it contained relative path under some circumstances.
Note: __DIR__
was added in PHP 5.3.0.