1

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

3 Answers 3

3

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.

Sign up to request clarification or add additional context in comments.

1 Comment

As the str_replace converts backslashes to slashes its windows and linux compat, I use in every project. Your Welcome.
2

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';

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.