Search code examples
phpincluderequire-once

PHP require problem with "./"


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.


Solution

  • 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.