我一直在使用$ _SERVER [“DOCUMENT_ROOT”]环境变量来引用我的应用中的公共根。现在我意识到这不是很可靠。我正在考虑一种方法,我在index.php中根据魔术常量定义一个常量。这样的事情:
define("PUBILC", __DIR__."/");
虽然我不确定。
你会推荐什么方法?
答案 0 :(得分:2)
如果所有请求都通过你的index.php,那么定义一个常量会有一个很好的,经常使用的想法。我也看到了使用(虚拟)主机配置或.htaccess定义环境变量的设置,但我认为它不太透明,便于携带。设置变量中的硬编码路径经常被使用,但更少“自动改变”然后人们希望。总而言之,我同意你的想法。
答案 1 :(得分:2)
绝对没有$_SERVER['DOCUMENT_ROOT']
分散在整个应用程序中。 Apache可以配置为使用VirtualDocumentRoot
将文档根目录设置为该目录但不更改DOCUMENT_ROOT环境变量,这可能导致网站损坏。
根据您的方法,我想在我的应用顶部定义DOC_ROOT
,并在我需要的任何地方使用它来引用文档根目录。
答案 2 :(得分:0)
你可以做类似的事情,但把它放在一些包含在你所有页面中的常见包含文件中。这适用于直接访问您网站上的网页而不通过主索引页的访问者。
例如,如果您的utilities.php
文件夹中有doc_root/inc
,并且它包含在您的所有网站页面中,则可能如下所示:
<?php
function GetDocumentRoot()
{
return dirname(dirname(__FILE__));
}
function WriteHeader()
{
//...
}
// more utility functions...
?>
答案 3 :(得分:0)
在我的项目中,我使用以下几行(以及一些其他行)进行了配置:
// set the root directory for the files
define('ROOT_DIR', "/path/to/my/htdocs/project_name/");
// set the root path for URLs
define('ROOT_PATH', "http://".$_SERVER['HTTP_HOST']."/project_name/");
在每个php文件中,我使用以下行包含此config.php:
require_once($_SERVER['DOCUMENT_ROOT'].'/config_project_name.php');
正如您所看到的,使用配置文件的前缀,您可以将它们全部放入根目录中,并且您仍然可以灵活地在不同的PC或服务器上拥有相同的项目。