views:

88

answers:

3

I have a file index.php in root directory:

<?php
require_once "./include/common.php";
?>

and file common.php in include folder:

<?php
require_once "globalConfig.php";
?>

file globalConfig in the same folder with common.php. The tree folder as:

xxx/index.php

xxx/include/common.php

xxx/include/globalConfig.php

index.php run normally. But if I change file common.php as:

<?php
require_once "./globalConfig.php";
?>

PHP show a warning that it cannot find the globalConfig.php file. What is the difference? I think int the case with "./", the most outside including file (index.php) will find the globalConfig.php in its current directory.

+1  A: 

I believe that the path (i.e. "./") is relative to the BASE script, not the file it's contained within. For this reason, I usually use absolute paths when including scripts.

Bobby Jack
+1  A: 

The path is relative to the current working directory; in a web context (php-cgi), this is the directory where the initially invoked script (the one that gets started directly instead of through on include) resides. An easy workaround:

require_once dirname(__FILE__) . '/foobar.inc.php';
tdammers
+2  A: 

In your index.php add

define('BASE_PATH',str_replace('\\','/',dirname(__FILE__)));

And then within common.php include like so.

require_once BASE_PATH . '/includes/globalConfig.php';

This will find the exact path and standerize the slashes, then whenever you use BASE_PATH alsways include from the root of your htdocs, ie index.php.

RobertPitt
thanks, it's a smart solution :)
coolkid
As the str_replace converts backslashes to slashes its windows and linux compat, I use in every project. Your Welcome.
RobertPitt