Aaron Harun Aaron Harun - 1 year ago 68
Linux Question

How do you get PHP, Symlinks and __FILE__ to work together nicely?

On localhost. I have the following directory structure:



is a symbolic link to
. Basically, this is because I need to test multiple WordPress installs and set them up, but I don't want to have to move plugins around and copy and paste them everywhere.

However, sometimes I need to crawl up the directory tree to include a config file:

$root = dirname(dirname(dirname(dirname(__FILE__))));
if (file_exists($root.'/wp-load.php')) {
// WP 2.6

The folder always resolves to:


Even when the plugin is being executed and included in


Is it possible in PHP to include files in the
directory from a script executing in a symlink to the

While this problem only happens on my test server, I'd like to have a safely distributable solution so crawling up an extra level is not an option.

Answer Source

The problem that I see with your code is that __FILE__ resolves symlinks automatically.

From the PHP Manual on Magic Constants

... Since PHP 4.0.2, __FILE__ always contains an absolute path with symlinks resolved ...

You can try using $_SERVER["SCRIPT_FILENAME"] instead.

$root = realpath(dirname(dirname(dirname(dirname($_SERVER["SCRIPT_FILENAME"])))));
  if (file_exists($root.'/wp-load.php')) {
      // WP 2.6

Note that I added the realpath() function to the root directory. Depending on your setup, you may or may not need it.

EDIT: Use $_SERVER["SCRIPT_FILENAME"] instead of $_SERVER["PHP_SELF"] for the file system path.