Common convention states that include files for a PHP web application should be kept in a given place. This allows the developer to easily find them.
This becomes a headache though when a site is deep and has many subdirectories. You then start seeing code like:
require_once( '../../../../../../includes/config.php' );
This creates a headache for developers since they have to remember where a page is in respect to the includes
directory. If the page is moved to a different subdirectory, the path in the require_once
(of, if you prefer, include
, require
, or require_once
) statement needs to be changed.
A simple workaround for this is to add the root directory of the site (or whichever directory is just above the includes
directory) to PHP's include path.
Let's assume a directory structure like:
/var/www/sites/example.com/
`- www/
|- logs/
`- web/
|- includes/
| `- config.php
|- test/
| |- test/
| | `- test /
| | `- test2.php
| `- test.php
`- index.php
In order to include includes/config.php
without modifying the include path, each page would use a different path:
index.php
:
require_once( 'includes/config.php' );
test/test.php
:
require_once( '../includes/config.php' );
test/test/test/test2.php
:
require_once( '../../../includes/config.php' );
Now, if /var/www/sites/example.com/www/web
is added to PHP's include path, all three scripts can load config.php
with the statement:
require_once( 'includes/config.php' );
This clearly reduces the hassle of maintaining and referencing the single directory for includes.
To add the /var/www/sites/example.com/www/web
directory to the include path, it must be appended to the include_path
configuration setting. To do this for PHP running under Apache using mod_php, the following line can be added in a .htaccess
file or directly to the site's VirtualHost
paragraph:
php_value include_path '.:/usr/local/lib/php:/var/www/sites/example.com/www/web'
(This assumes that PEAR modules are stored under /usr/local/lib/php
.)
If this is the only site on the server, the include_path
setting can be edited in php.ini
. If using a CGI-based PHP, you may be able to create a local php.ini
for this same end. Consult the PHP documentation on runtime configuration for more information.