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

Viewed 25057

On localhost. I have the following directory structure:

/share/www/trunk/wp-content/plugins/otherfolders

/share/www/portfolio/wp-content/symlink

Where symlink is a symbolic link to /trunk/.../plugins/. 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
          require_once($root.'/wp-load.php');
      }

The folder always resolves to:

/share/www/trunk

Even when the plugin is being executed and included in

/share/www/portfolio/.

Is it possible in PHP to include files in the share/www/portfolio directory from a script executing in a symlink to the /share/www/trunk/.../plugins directory?

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.

7 Answers

None of the suggested solutions worked in all these environments, CLI, PHPUNIT, WebServer.

What I ended up with was defining a variable for my project's root.

define( 'ABSPATH', __DIR__ . '/' );

And then used it in my symlinked plugins.

This may not be what you can always do but if it's okay with your use case it definitely works everywhere!

eg:

require_once(ABSPATH .'/wp-load.php');

If you are using WordPress this is already defined and you can just use it!

Related