如何包含一个超过2个目录的文件.我知道你可以使用../index.php
包含2个目录的文件,但你如何为3个目录做回来?这有意义吗?我试过.../index.php
但它不起作用.
我有一个文件,/game/forum/files/index.php
它使用PHP include包含一个文件.位于/includes/boot.inc.php
; /
作为根目录.
..
从当前选择父目录.当然,这可以链接:
../../index.php
这将是两个目录.
要将文件包含在一个目录中,请使用'../file'
.对于两个目录,请使用'../../file'
.等等.
虽然,实际上你不应该执行包括相对于当前目录.如果您想移动该文件怎么办?所有的链接都会破裂.确保您仍可以链接到其他文件的方法,同时在移动文件时保留这些链接,是:
require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');
DOCUMENT_ROOT
是一个服务器变量,表示代码所在的基本目录.
. = current directory .. = parent directory
所以../
给你一个目录而不是两个.
../
根据需要连锁多次,达到2级以上.
include dirname(__FILE__).'/../../index.php';
这是你最好的选择,它将避免你可以遇到的其他解决方案的大多数相对路径错误.
事实上,这将迫使包括永远是相对于当前脚本的位置,其中该代码被放置(哪个位置是最有可能的稳定,因为你定义应用程序的体系结构).这与仅执行include '../../index.php'
相对于执行(也称为"调用")脚本然后相对于当前工作目录不同,后者将指向包含脚本的父脚本,而不是从包含脚本的路径解析.
从PHP文档:
根据给定的文件路径包含文件,如果没有给出,则指定include_path.如果在include_path中找不到该文件,include将最终在失败前检入调用脚本自己的目录和当前工作目录.
我发现引用这个技巧的最古老的帖子可以追溯到2003年,由Tapken.
您可以使用以下设置进行测试:
创建这样的布局:
htdocs ¦ parent.php ¦ goal.php ¦ +---sub ¦ included.php ¦ goal.php
在parent.php
,放:
在sub/included.php
,放:
访问时的结果parent.php
:
WRONG : X:\htdocs\goal.php GOOD : X:\htdocs\sub\goal.php
我们可以看到,在第一种情况下,路径是从调用脚本解析的parent.php
,而通过使用dirname(__FILE__).'/path'
技巧,include是从included.php
放置代码的脚本完成的.
请注意,以下内容并不等同于上面的诀窍,与其他地方的内容相反:
include '/../../index.php';
实际上,prepending /
将起作用,但它将像include ../../index.php
调用脚本一样解决(不同之处在于include_path
如果失败则不会被追查).来自PHP doc:
如果定义了一个路径 - 无论是绝对路径(从Windows上的驱动器号或者\或Unix/Linux系统上的/开始)还是相对于当前目录(以.或..开头) - include_path将被完全忽略.
../
是一个目录,重复两个目录../../
甚至三个:../../../
依此类推.
定义常量可以减少混淆,因为您将向后钻取到目录中
您可以定义一些常量,如下所示:
define('BD', '/home/user/public_html/example/'); define('HTMLBD', 'http://example.com/');
当使用'BD'或我的'基目录'时,它看起来像这样:
file(BD.'location/of/file.php');
限定(); 参考
../../index.php
../../../includes/boot.inc.php
每个实例../
意味着向上/向后一个目录.
以下是访问不同目录的方法: -
./ = Your current directory ../ = One directory lower ../../ = Two directories lower ../../../ = Three directories lower
你可以这样做../../directory/file.txt
- 这会回到两个目录.
../../../
- 这三个.等等
../../../index.php
../../../includes/boot.inc.php
但是要让用户选择文件时要非常小心.你真的不想让他们获得一个名为的文件,例如,
../../../../../../../../../../etc/passwd
或其他敏感系统文件.
(对不起,我已经有一段时间了,因为我是一个linux系统管理员,我认为这是一个敏感的文件,从我记得的)