如何包含一个返回2个以上目录的文件。我知道您可以使用 ../index.php来包含一个返回2个目录的文件,但是如何对返回3个目录进行操作呢? 这说得通吗? 我试过 .../index.php但是没用。
../index.php
.../index.php
我在 /game/forum/files/index.php中有一个文件,它使用 PHP include 来包含一个文件。它位于 /includes/boot.inc.php中; /是根目录。
/game/forum/files/index.php
/includes/boot.inc.php
/
../../index.php
你可以做 ../../directory/file.txt-这回到两个目录。
../../directory/file.txt
这是第三次
../../../includes/boot.inc.php
..从当前目录中选择父目录。当然,这可以链接:
..
上面有两个目录。
../../../index.php
../的每个实例意味着向上/向后一个目录。
../
. = current directory .. = parent directory
So ../ gets you one directory back not two.
链 ../多次必要上升2个或更多的水平。
但是在让用户选择文件时要小心 非常非常。你不会真的想让他们得到一个文件,例如,
../../../../../../../../../../etc/passwd
或其他敏感的系统文件。
(对不起,我已经有一段时间没有使用 linux 系统管理员了,根据我的记忆,我 好好想想是一个敏感文件)
若要将文件包含在一个目录后面,请使用 '../file'。 For two directories back, use '../../file'. 诸如此类。
'../file'
'../../file'
不过,实际上你不应该执行包括相对于工作目录。如果你想移动那个文件呢?所有的链接都会断开。一种确保你仍然可以链接到其他文件,同时在移动文件时保留这些链接的方法是:
require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');
DOCUMENT_ROOT是一个服务器变量,表示代码所在的基目录。
DOCUMENT_ROOT
如果在 include 的开头包含 /,则 include 将被视为站点根目录的路径。
如果您的站点是 http://www.example.com/game/forum/files/index.php,您可以向/include/boot.inc.php 添加一个 include,它将解析为 http://www.example.com/includes/boot.inc.php。
You have to be careful with .. traversal as some web servers have it disabled; it also causes problems when you want to move your site to a new machine/host and the structure is a little different.
../是一个目录,对两个目录重复 ../../或甚至三个: ../../../等等。
../../
../../../
定义常数可能会减少混淆,因为您将向前钻取到目录中,而向后钻取
你可以这样定义一些常量:
define('BD', '/home/user/public_html/example/'); define('HTMLBD', 'http://example.com/');
当使用“ BD”或我的“基本目录”时,它看起来是这样的:
file(BD.'location/of/file.php');
释义() ; 引用
include dirname(__FILE__).'/../../index.php';
是您在这里的最佳选择,并且它将避免您在使用其他解决方案时可能遇到的大多数相对路径错误。
实际上,它将强制 include 始终是放置此代码的 相对于当前脚本的位置(由于您定义了应用程序的体系结构,因此哪个位置最有可能是稳定的)。这与仅仅执行 include '../../index.php' 它将包括相对于执行(也称为“调用”)脚本,然后相对于当前工作目录不同,include '../../index.php' 它将包括相对于执行(也称为“调用”)脚本,然后相对于当前工作目录将指向包含您的脚本的父脚本,而不是从包含的脚本的路径解析。
include '../../index.php'
来自 PHP 文档:
根据给定的文件路径包含文件,如果没有给定路径, 指定的 include _ path。如果在 Include _ path,include 将最终检入调用脚本自己的 目录和当前工作目录,然后才失败。
也是我发现的引用这个技巧的最古老的帖子。
您可以使用以下设置进行测试:
创建这样的布局:
htdocs ¦ parent.php ¦ goal.php ¦ +---sub ¦ included.php ¦ goal.php
在 parent.php中,输入:
parent.php
<?php include dirname(__FILE__).'/sub/included.php'; ?>
在 sub/included.php中,输入:
sub/included.php
<?php print("WRONG : " . realpath('goal.php')); print("GOOD : " . realpath(dirname(__FILE__).'/goal.php')); ?>
访问 parent.php时的结果:
WRONG : X:\htdocs\goal.php GOOD : X:\htdocs\sub\goal.php
正如我们所看到的,在第一种情况下,路径是从调用脚本 parent.php解析的,而通过使用 dirname(__FILE__).'/path'技巧,包含是从放置代码的脚本 included.php中完成的。
dirname(__FILE__).'/path'
included.php
请注意,以下内容并不等同于上述技巧,与其他地方可以读到的内容相反:
include '/../../index.php';
事实上,前置的 /可以工作,但是它将像调用脚本中的 include ../../index.php一样解析(区别在于,如果 include_path失败,事后不会查看它)。返回文章页面
include ../../index.php
include_path
如果定义了路径ーー是否为绝对路径(以驱动器号开头) 或/在 Unix/Linux 系统上) ,或相对于 工作目录(以. . 或. . 开头)ー include _ path 将为 完全被忽略了。
我看到了你的答案,我使用了语法包含路径
require_once '../file.php'; // server internal error 500
和 http 服务器(Apache 2.4.3)返回内部错误500。
当我改变路径
require_once '/../file.php'; // OK
一切都很好。
试试 ../../。您可以相应地修改它,因为它将带您回到两个目录。首先到达根目录,然后访问所需的目录。
例如。您在 root/inc/usr/ap中,并且还有另一个目录 root/2nd/path。您可以像下面这样从 ap访问 path目录: ../../2nd/path首先进入根目录比所需的目录。如果不工作,请共享。
root/inc/usr/ap
root/2nd/path
ap
path
../../2nd/path
以下是访问不同目录的方法:-
./ = Your current directory ../ = One directory lower ../../ = Two directories lower ../../../ = Three directories lower
可以通过代理文件进行处理
... | _ proxy. php
dbsettings.php: $host='localhost'; $user='username': $pass='pass'; proxy.php: include_once 'db/dbsettings.php requiredDbSettings.php: include_once './../proxy.php';
如果你正在使用 php7,你可以使用 dirname 函数,其级别参数为2,例如:
dirname("/usr/local/lib", 2);
第二个参数“2”表示升了多少级
名称引用
I recomend to use __DIR__ to specify 当前的 php 文件目录. Check 给你 for the reason.
__DIR__
__DIR__ . /../../index.php
试试这个
这个示例返回一个目录
require_once('../images/yourimg.png');
这个示例位于两个目录之后
require_once('../../images/yourimg.png');