我在共享服务器上有一个帐户,该帐户不再维护且配置不完善。
echo $_SERVER["SCRIPT_FILENAME"] = '/path/to/my/root/and/now/path/to/my/file/location.php'
但 ...
echo $_SERVER["DOCUMENT_ROOT"] = '/var/www'
我需要找到站点根目录,所以我编写了自己的方法来做到这一点。我想知道的是,是否有人在我将其投入生产之前看到了为什么它不能始终如一地工作的原因?
注意:我知道它不适用于包含/要求、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 中删除脚本名称,然后删除根目录之后的所有目录名称。
编辑:我上面的描述说“在根之后”,但 str_replace 并不关心替换发生在字符串中的哪个位置。这可能会破坏它。因此,我修改了我的解决方案,只替换匹配路径的最后一个实例:
define('ROOT_PATH',preg_replace('(.*)'.
preg_quote(str_replace('/'.basename(__FILE__),'',
$_SERVER["SCRIPT_URL"]),'~').'(.*?)~','$1'.''.'$2',dirname(__FILE__),1));
preg_replace
不幸的是有点慢。