在我的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中托管它是否重要?
答案 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中,所以必须使用\而不是/