在我的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'); ?>
Run Code Online (Sandbox Code Playgroud)
这是在Windows上的IIS中托管吗?
J C*_*per 25
你可以使用 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');
Run Code Online (Sandbox Code Playgroud)
在某些情况下使用环境变量可能是危险的,并且是安全问题的根源.
正如@Stefan Mai所说,PHP没有"根"路径,但你可以很容易地定义一个 - 大多数网站都有一个每次都包含的页面(例如配置文件),你可以添加:
define('ROOT', dirname(__FILE__));
Run Code Online (Sandbox Code Playgroud)
然后使用包含ROOT.'/includes/analytics.php';
一些非常有用的东西是auto_prepend指令,你可以在apache上使用.htaccess - 不确定在IIS上设置它(虽然你可以在PHP ini中有一个全局的).
如果为include()或require()(或*_once版本)提供绝对路径名,则将包含该文件.绝对路径名在unix上以"/"开头,在Windows上以驱动器号和冒号开头.
如果给出相对路径(任何其他路径),PHP将按顺序搜索配置值"include_path"中的目录,直到找到匹配项或没有其他目录要搜索.
因此,简而言之,要包含绝对文件名,请提供绝对文件名.另请参见函数realpath().
如果你想设置自己的"root",请看看这个问题(特别是我的回答当然:-)
小智 5
我结合了上述建议并提出了这个。
在我的config.php文件中,我将 ROOT 定义为:
define('ROOT', $_SERVER['DOCUMENT_ROOT']);
然后我在后续文件中使用它:
include_once(ROOT."/someFile.php");
include_once(ROOT."/includes/someFile.php");