How to require PHP files relatively (at different directory levels)?
Try adding dirname(__FILE__)
before the path, like:
require(dirname(__FILE__).'/../../dir2/file3.php');
It should include the file starting from the root directory
A viable recommendation is to avoid "../../" relative paths in your php web apps. It's hard to read and terrible for maintenance.
As you can attest. It makes it extremely difficult to know what you are pointing to.
If you need to change the folder level of your application, or parts of it. It's completely prone to errors, and will likely break something that is horrible to debug.
Instead, a preferred pattern would be to define
a few constants in your bootstrap file for your main path(s) and then use:
require(MY_DIR.'/dir1/dir2/file3.php');
Moving your app from there, is as easy as replacing your MY_DIR
constants in one single file.
If you must keep it relative. At a minimum, construct an absolute path based on a relative path reference, like the accepted response suggest. However also strongly keep in mind the importance of naming your ../
anonymous intermediate paths, as a means to remove confusion or ambiguity.
For relative paths you can use __DIR__
directly rather than dirname(__FILE__)
(as long as you are using PHP 5.3.0 and above):
require(__DIR__.'/../../dir2/file3.php');
Remember to add the additional forward slash at the beginning of the path within quotes.
See:
- PHP - with require_once/include/require, the path is relative to what?
- PHP - Relative paths "require"