在我的PHP网站和各种嵌套目录的各个页面上,我想在相对于根的路径中包含特定文件.
我可以在这两个页面上放置什么单一命令......
http://www.example.com/pageone.php
http://www.example.com/somedirectory/pagetwo.php
...包括此页面:
http://www.example.com/includes/analytics.php
这不起作用:
这是在Windows上的IIS中托管吗?
你可以使用 include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php";
从PHP的角度来看,root是Web服务器上文件系统的顶层,而不是Web浏览器的根目录.
大多数人都会做以下其中一种.
在全局配置文件中定义常量,并在每次调用require/include时使用它.
或者他们使用这样的代码.
require_once realpath(dirname(__FILE__).'/config.php'); require_once realpath(dirname(__FILE__).'/lib/Database.php');
在某些情况下使用环境变量可能是危险的,并且是安全问题的根源.
正如@Stefan Mai所说,PHP没有"根"路径,但你可以很容易地定义一个 - 大多数网站都有一个每次都包含的页面(例如配置文件),你可以添加:
define('ROOT', dirname(__FILE__));
然后使用包含ROOT.'/includes/analytics.php';
一些非常有用的东西是auto_prepend指令,你可以在apache上使用.htaccess - 不确定在IIS上设置它(虽然你可以在PHP ini中有一个全局的).
如果为include()或require()(或*_once版本)提供绝对路径名,则将包含该文件.绝对路径名在unix上以"/"开头,在Windows上以驱动器号和冒号开头.
如果给出相对路径(任何其他路径),PHP将按顺序搜索配置值"include_path"中的目录,直到找到匹配项或没有其他目录要搜索.
因此,简而言之,要包含绝对文件名,请提供绝对文件名.另请参见函数realpath().
如果你想设置自己的"root",请看看这个问题(特别是我的回答当然:-)