如何格式化PHP include()绝对(而不是相对)路径?

时间:2008-12-05 19:10:47

标签: php path include

在我的PHP网站和各种嵌套目录的各个页面上,我想在相对于根目录的路径中包含特定文件。

我可以在这两个页面上放置什么单一命令......

http://www.example.com/pageone.php
http://www.example.com/somedirectory/pagetwo.php

...包含此页面:

http://www.example.com/includes/analytics.php

这不起作用:

<?php include('/includes/analytics.php'); ?>

在Windows上的IIS中托管它是否重要?

9 个答案:

答案 0 :(得分:24)

您可以使用include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";

答案 1 :(得分:9)

从PHP的角度来看,root是Web服务器上文件系统的顶层,而不是Web浏览器的根目录。

大多数人会做以下其中一项。

在全局配置文件中定义一个常量,并在每次调用require / include时使用它。

或者他们使用这样的代码。

require_once realpath(dirname(__FILE__).'/config.php');
require_once realpath(dirname(__FILE__).'/lib/Database.php');

在某些情况下使用环境变量可能是危险的,并且是安全问题的根源。

答案 2 :(得分:8)

正如@Stefan Mai所说,PHP没有“根”路径,但你可以很容易地定义一个 - 大多数网站都有一个每次都包含的页面(例如配置文件),你可以添加:

define('ROOT', dirname(__FILE__));

然后使用include ROOT。 '/includes/analytics.php';

一些非常有用的东西是auto_prepend指令,你可以在apache上使用.htaccess - 不确定在IIS上设置它(虽然你可以在PHP ini中有一个全局的)。

答案 3 :(得分:5)

如果为include()或require()(或* _once版本)提供绝对路径名,则将包含该文件。绝对路径名在unix上以“/”开头,在Windows上以驱动器号和冒号开头。

如果您提供相对路径(任何其他路径),PHP将按顺序搜索配置值“include_path”中的目录,直到找到匹配项或没有其他目录可供搜索。

因此,简而言之,要包含绝对文件名,请提供绝对文件名。另请参见函数realpath()

如果您想设置自己的“root”,请查看this question(特别是我的答案当然: - )

答案 4 :(得分:4)

我结合了上述建议并提出了这个建议。

在我的config.php文件中,我将ROOT定义为:

define('ROOT', $_SERVER['DOCUMENT_ROOT']);

然后我在我的成功文件中使用它:

include_once(ROOT."/someFile.php");

include_once(ROOT."/includes/someFile.php");

答案 5 :(得分:1)

使用..上一个目录。所以在pageone.php中

include 'includes/analytics.php';
pagetwo.php中的

include '../includes/analytics.php';

据我所知,你在PHP中指的是“root”没有概念,尽管你可以根据需要定义它。祝你好运!

答案 6 :(得分:1)

这很有效。

<?php include('c:/inetpub/example.com/includes/analytics.php'); ?>

我必须使c:/inetpub/example.com/部分成为某种全局变量,因此它在某种程度上可以从服务器移植到服务器。

答案 7 :(得分:0)

波形符号被shell解释为一个特殊字符,因此无论操作系统如何,在PHP代码中使用它都是行不通的。

如果您尝试访问与用户主目录相关的内容,可以尝试getenv() - 我非常确定Windows会设置一个等同于$HOME的环境变量。

答案 8 :(得分:0)

我发现的方式是:

<?php include $_SERVER['DOCUMENT_ROOT'].'\\Your\\Site\\Path.php' ?>

当你有一些可以转义的特殊字符(即\ n)时,\\是必要的,所以\\是字符串上的\。

因为您在Windows中,所以必须使用\而不是/