简体   繁体   中英

calling include from an included file

So, examining this directory structure

  • /include_one.php
  • /include_two.php
  • /directory/main_file.php

Assume that I am in /directory/main_file.php and I call include('../include_one.php'); inside of include_one.php , to include include_two.php . Do I need to call include('include_two.php); or include('../include_two.php'); ?

So my question is: When including a file, is the 'relative include path' shifted to the included file, or does it remain at the main including file?

I am aware that the best alternative would be to have a config.php which contains the root_path, however this is not possible at this stage.


update:
So, im not sure who is right, as here is my test

directory structure

/include.php
/start/start.php
/folder1/includeone.php
/folder1/folder2/includetwo.php

and here is the contents of each file

start.php

 <?php echo 'including ../include.php<br />'; include('../include.php'); ?> 

include.php

 <?php echo 'including folder1/includeone.php<br />'; include('folder1/includeone.php'); ?> 

includeone.php

 <?php echo 'including folder2/includetwo.php<br />'; include('folder2/includetwo.php'); ?> 

includetwo.php

 <?php echo 'done<br />'; ?> 

and the output is

including ../include.php
including folder1/includeone.php
including folder2/includetwo.php
done

The "relative include path" is not shifted to the included file... Which means that using relative paths generally ends badly.

A better solution, that I use almost all the time, is to always work with absolute paths -- and you can mix relatives and absolute paths using __DIR__ , to get the directory that contains the file where this is written.


For example, in include_one.php , you'd use :

require_once __DIR__ . '/include_two.php';

To include the include_two.php file that's in the same directory as include_one.php .


And, in main_file.php , you'd use :

require_once __DIR__ . '/../include_one.php';

To include the include_one.php file that's one directory up.


With that, your includes will work, no matter from which file they are called.

I am using this code:

if(!isset($TO_HOME_DIR)) $TO_HOME_DIR="../"; 

And I include a file:

include_once($TO_HOME_DIR."common/include_one.php");

With if(!isset($TO_HOME_DIR)) , it's not important how much you include a file into included file into included file into includ..... Only first file's -and main file's- $TO_HOME_DIR declaration is used.

Second advantage of this approach is, if you change directory of file, you only need to change one line of code; $TO_HOME_DIR declaration. :)

The include path is relative to the first file in the include chain.

A good way to ensure the correct include path is to always include from the document root.

This is done like this:

include $_SERVER['DOCUMENT_ROOT'] . '/folder1/folder2/includetwo.php';

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM