Hailwood Hailwood - 3 months ago 7
PHP Question

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

Answer

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.

Comments