In PHP, what would be the cleanest way to get the parent directory of the current running script relative to the www root? Assume I have:
$_SERVER['SCRIPT_NAME'] == '/relative/path/to/script/index.php'
$something_else == '/relative/path/to/script/'
And I need to get
/relative/path/to/ with slashes properly inserted. What would you suggest? A one liner is preferred.
I need to get a path relative to the www root,
dirname(__FILE__) gives me an absolute path in the filesystem so that won't work.
$_SERVER['SCRIPT_NAME'] on the other hand 'starts' at the www root.
If your script is located in
/var/www/dir/index.php then the following would return:
dirname(__FILE__); // /var/www/dir
dirname( dirname(__FILE__) ); // /var/www
This is a technique used in many frameworks to determine relative paths from the app_root.
/var/ www/ index.php subdir/ library.php
index.php is my dispatcher/boostrap file that all requests are routed to:
define(ROOT_PATH, dirname(__FILE__) ); // /var/www
library.php is some file located an extra directory down and I need to determine the path relative to the app root (/var/www/).
$path_current = dirname( __FILE__ ); // /var/www/subdir $path_relative = str_replace(ROOT_PATH, '', $path_current); // /subdir
There's probably a better way to calculate the relative path then
str_replace() but you get the idea.
As of PHP 5.3.0 you can use
__DIR__ for this purpose.
The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__ FILE__).
See PHP Magic constants.
C:\www>php --version PHP 5.5.6 (cli) (built: Nov 12 2013 11:33:44) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies C:\www>php -r "echo __DIR__;" C:\www