I'm building the basic framework for my website and I have a config.php
file stored in a scr
directory. Additionally, this directory has a folder called php
where I store a file called sidebar.php
Basically, the config.php
file will hold my database configuration variables and is also the only file called by every page. I wish to include php/sidebar.php
in this file so any variables I create in sidebar.php
can be used on all pages.
However, I also want sidebar.php
to have access to the database configuration variables. So these two files will effectively be including each other.
The include from config to sidebar is:
include 'php/sidebar.php';
From sidebar to config is:
include '../config.php';
However, the above statement (sidebar to config) yields the below error message:
Warning: include(../config.php) [function.include]: failed to open stream:
No such file or directory in C:\xampp\website\scr\php\sidebar.php on line 3
Am I going about this all wrong cross-linking the two files or is there a decent reason why it's not working
Generally speaking, a secure way of doing includes is to use dirname(__FILE__)
, or __DIR__
if you're using PHP >= 5.3, to have an absolute path -- written relatively from the current one.
For instance, you could use :
include dirname(__FILE__) . '/php/sidebar.php';
Note : dirname(__FILE__)
and __DIR__
point to the directory of the file in which they are written.
With that, no need to worry what is included from where and includes what : you always reference files using absolute pahts.
Relevant pages in the manual :
dirname()
__FILE__
and __DIR__
.
Also, as @jwir3 pointed out in his comment, you'll sometimes want to use require_once()
or include_once()
, to make sure a given file is not included more than once.
Including a file more than once can lead to trouble, especially if it contains constants, functions, or classes definitons.
I guess that the php parser is already reading the file. You should use include_once
instead of include
to avoid this problem.
Aditionally you should also strongly consider require_once
as it protect against the case where the included file doesn't exists, especially for a configuration file, your app should crash instead of ignoring it (And that's what require does).
PS : As other said the cyclic dependency should be broken anyway it's a pretty good sign of bad design.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With