I'm not sure how simple is this to solve, but I assume I'm doing something wrong. I'm new to PHP, so bear with me, please.
When I started learning PHP, I always placed all my project files into the same folder along with index.php
and thus included everything like this:
<?php
include('./translation.php');
?>
Later on in the process of learning as I gained experience and my skill increased, I had to start using folders and place my files into sub folders. I ended up successfully including my files with the following:
<?php
include('../translation.php');
?>
My trouble-free coding took an unexpected turn when I decided to start using sub-sub folders. After placing all the files even deeper into the file structure I was shocked to find out that I cannot include them anymore, using:
<?php
include('.../translation.php');
?>
Now I'm lost. What did I do wrong? Am I to understand that I cannot include files deeper than 2 directories in the project? Should I start using a different file system?
You got the concept incorrect.
.
represents current directory..
represents parent directory These are the way a file system keeps in track of the file and browse depth.
But you cannot use ...
to change the directory. As you go deeper, you have to use
For example:
include('../../translation.php');
includes the files, two level outside of current directory. Which is probably what you were trying to do.
The include should be:
<?php
include('../../translation.php');
?>
Each level 'up' needs its own ../
.
For example, if you had the following directories:
a
a1
filex.php
a2
b
b1
filey.php
If in filex.php, you wanted to include filey.php, you would do the following:
<?php
include('../../b/b1/filey.php');
?>
Up/out twice, down/ib twice
Basically, any time you want to go 'down' a level / into a folder, you give the name of the folder followed by a forward slash. But to go 'up' or out of the current folder (to the parent folder of the current folder) you give ..
followed by the forward slash
If you want to go deeper (subfolder of subfolder), just use ../../
include("../../translation.php");
However, if your project is middle size or big size, I'd rather suggest you to define absolute path. In your index.php or whatever your included file is, define something like SITE_ROOT
or INCLUDES_ROOT
.
define("SITE_ROOT", dirname(__FILE__));
and then just use it on demand.
include(SITE_ROOT."/../../translation.php");
which is pretty useful in case you are including files from different folders
That said, imagine you have this folder structure
CASE1: (fails)
index.php includes
<?php
include("includes/boot.php");
ajax/ajax2/ajaxfile.php includes
<?php
include("../../includes/boot.php");
includes/boot.php includes
<?php
include("translations/en.php"); // from index.php it works but from ajax/ajax2/ajaxfile.php it searches for wrong file
CASE2: (passes)
ajax/ajax2/ajaxfile.php and index.php has the same content as the CASE1
includes/boot.php includes
<?php
define("INCLUDES_ROOT", dirname(__FILE__));
include(INCLUDES_ROOT."/../translations/en.php");
which passes, because INCLUDES_ROOT
makes sure that the whole include point to the correct directory!
Let's assume this tree of folders.
-> site
-> public_html (Inside the site folder)
-> index.php (Inside the public_html folder)
-> translation.php (Inside the site folder)
in your index.php you just have to use include "../translation.php";
if the translation.php is in the same folder as the site folder, you use include "../../translation.php";
if your translation.php is in the same folder as the index.php though, you just have to include like this: include "translation.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.