23

在我的 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 中是否重要?

4

9 回答 9

26

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

于 2008-12-05T19:24:13.100 回答
9

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

大多数人会执行以下操作之一。

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

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

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

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

于 2008-12-05T19:31:00.670 回答
8

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

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

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

auto_prepend 指令也很有用,您可以在 apache 的 .htaccess 中使用它——不确定是否在 IIS 上设置它(尽管您可以在 PHP ini 中使用全局指令)。

于 2008-12-05T19:20:53.560 回答
5

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

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

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

如果您想设置自己的包含“root”,请查看这个问题(当然特别是我的回答 :-)

于 2008-12-05T19:25:01.493 回答
5

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

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

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

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

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

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

于 2010-12-13T06:02:47.037 回答
1

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

include 'includes/analytics.php';

在 pagetwo.php

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

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

于 2008-12-05T19:15:12.353 回答
1

这行得通。

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

我必须使该c:/inetpub/example.com/部分成为某种全局变量,以便它在服务器之间具有一定的可移植性。

于 2008-12-05T19:29:09.567 回答
0

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

如果您尝试访问与用户主目录相关的内容,您可以尝试getenv()- 我很确定 Windows 设置了一个等效于$HOME.

于 2008-12-05T19:25:23.770 回答
0

我找到的方法是:

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

当您有一些可以转义的特殊字符(即 \n)时,\\ 是必需的,因此 \\ 是字符串上的 \。

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

于 2013-09-09T20:18:07.997 回答