PHP在配置错误的共享服务器上定义文档根目录

时间:2013-06-22 13:10:31

标签: php

我在共享服务器上有一个帐户,该帐户已不再维护且配置不当。

echo $_SERVER["SCRIPT_FILENAME"] = '/path/to/my/root/and/now/path/to/my/file/location.php'

但......

echo $_SERVER["DOCUMENT_ROOT"] = '/var/www'

我需要找到站点根目录,所以我编写了自己的方法来执行此操作。我想知道的是,如果有人看到为什么在我投入生产之前这不能持续工作的原因?

注意:我知道它不能与includes / requires,url-rewriting或index.php或任何其他根扩展一起使用apache配置为静默访问。

这是我的方法:

define('ROOT_PATH', str_replace(str_replace('/'.basename(__FILE__),'',     
$_SERVER["SCRIPT_URL"]),'',dirname(__FILE__)));

require_once ROOT_PATH.'/and/now/path/to/my/file/location.php';

本质上,它从脚本url中删除脚本名称,然后删除在root之后找到的所有目录名称。

编辑:我上面的描述是'在root之后',但str_replace并不关心替换发生在字符串中的哪个位置。这可能会破坏它。因此,我已将我的解决方案修改为仅替换匹配路径的最后一个实例:

define('ROOT_PATH',preg_replace('(.*)'.
preg_quote(str_replace('/'.basename(__FILE__),'',
$_SERVER["SCRIPT_URL"]),'~').'(.*?)~','$1'.''.'$2',dirname(__FILE__),1));
不幸的是,

preg_replace有点慢。

1 个答案:

答案 0 :(得分:2)

最好的方法是完全避免使用它,而是定义一个“应用程序根”。如果您的index.php在此文件中,则应该:

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

如果您想在某个包含的文件中定义此内容,例如includes/approot.php,请为每个子文件夹再次调用dirname

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

了解文档根目录并不是很有用。了解应用程序根目录。