Answers:
..
从当前目录中选择父目录。当然,可以将其链接起来:
../../index.php
这将是两个目录。
define
这里将使用a,但(1)甚至不是这里的问题。并且(2)仍然会在您的define
服务器中使用相对路径,除非您实际上对整个绝对服务器路径进行了硬编码,但我会避免这样做,因为它只有缺点。或者(第三个选择),您可以使用字符串操作从(扩展的)当前路径中提取父目录,但是再次使用相对路径没有任何优势。
/../
可能工作或者../
可能工作,或者两者都不是可以在三个不同的计算机上工作具有完全相同的环境设置
../
和)../../
(注意:不能使用斜杠!)在所有现代操作系统上均适用。它曾经不能在Windows和(很久以前)Macintosh上运行,但现在在任何地方都可以运行,并且至少已经运行了十年。如果在某处不起作用,则原因是文件结构不同,和/或您位于其他工作目录中。但这与这段代码无关。
/../
而不是../
依靠他的环境。
/../
在任何系统上都毫无意义(等效于/
,或者是错误)。您确定没有在其前面粘贴内容吗?
要将文件包含在一个目录中,请使用'../file'
。对于两个目录,请使用'../../file'
。等等。
尽管实际上,您不应该执行相对于当前目录的包含。如果要移动该文件怎么办?所有链接都将断开。确保您仍然可以链接到其他文件,同时在移动文件时保留这些链接的一种方法是:
require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');
DOCUMENT_ROOT
是一个服务器变量,代表您的代码所在的基本目录。
include dirname(__FILE__).'/../../index.php';
是您最好的选择,它将避免其他解决方案可能遇到的大多数相对路径错误。
确实,这将迫使include始终相对于放置此代码的当前脚本的位置(该位置很可能是稳定的,因为您定义了应用程序的体系结构)。这与仅执行include '../../index.php'
相对于执行(也称为“调用”)脚本,然后相对于当前工作目录(仅指向包含您的脚本的父脚本)有关,而不是从包含的脚本路径进行解析。
从PHP文档中:
根据给定的文件路径包含文件,如果没有给出文件路径,则基于指定的include_path。如果在include_path中找不到该文件,则include最终将在失败之前检入调用脚本的自身目录和当前工作目录。
我发现引用此技巧的最古老的帖子可以追溯到Tapken的2003年。
您可以使用以下设置进行测试:
创建这样的布局:
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
在中parent.php
,输入:
<?php
include dirname(__FILE__).'/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
放置代码的脚本完成的。
当心,以下内容与上面的技巧并不等同,与其他地方可以读到的相反:
include '/../../index.php';
的确,前置/
可以起作用,但是可以像include ../../index.php
调用脚本一样进行解析(不同之处在于,include_path
如果失败,它将不会在以后被查看)。从PHP doc:
如果定义了路径(无论是绝对路径(在Windows中以驱动器号或\开头,在Unix / Linux系统上以/开头)还是相对于当前目录(以。或..开头),则include_path将被完全忽略。
..
路径的中间(相对/绝对)。
..
包含中间使用何处。它始终应该是include的第一部分
../
是一个目录,重复两个目录../../
,甚至三个:../../../
等等。
定义常量可以减少混乱,因为您将向后钻入目录
您可以这样定义一些常量:
define('BD', '/home/user/public_html/example/');
define('HTMLBD', 'http://example.com/');
当使用“ BD”或我的“基本目录”时,它看起来像这样:
file(BD.'location/of/file.php');
您可以../../directory/file.txt
-将两个目录退回。
../../../
-这三个。等等
我建议使用__DIR__
来指定当前的php文件目录。检查这里的原因。
__DIR__ . /../../index.php
可以通过代理文件处理包括目录在内的所有内容
..... | __proxy.php
dbsettings.php:
$host='localhost';
$user='username':
$pass='pass';
proxy.php:
include_once 'db/dbsettings.php
requiredDbSettings.php:
include_once './../proxy.php';
如果您在包含内容的/
开头包含,则包含内容将作为从站点根目录开始的路径。
如果您的网站是http://www.example.com/game/forum/files/index.php,则可以在/includes/boot.inc.php中添加一个包含内容的内容,该内容将解析为http://www.example.com /includes/boot.inc.php。
..
由于某些Web服务器已禁用遍历,因此必须小心。当您要将站点移至新的计算机/主机时,它还会引起问题,并且结构有所不同。
试试这个
这个例子是一个目录
require_once('../images/yourimg.png');
这个例子是两个目录
require_once('../../images/yourimg.png');