1

我开发各种 PHP 应用程序并将其部署到不同的环境。特别是在开发环境中,它们可以在任何地方,从 document_root 到 /Users/me/Sites/ 甚至 /Users/me/Sites/someapp/

在这些应用程序中,我需要知道“应用程序根”在哪里,一次是真实路径,一次是 URL。路径没有问题。假设我在应用程序根目录中有一个 bootstrap.php :

define("BASE_DIR", realpath(dirname(__FILE__)));

但是,我无法可靠地获取基本 URL。在大多数环境中,只需从 BASE_DIR 中减去文档根即可:

define("BASE_URL", str_replace($_SERVER['DOCUMENT_ROOT'],'',BASE_DIR) . "/");

现在,我的问题是:这不适用于我的应用程序位于我的用户目录中的环境,因为 PHP 仍然可以看到主文档根目录。有没有人解决过这个问题?

4

1 回答 1

4

当服务器配置了别名时,任何涉及 realpath() 和 DOCUMENT_ROOT 的东西都会失败。考虑一个 Apache 有这样一个配置的场景:

DocumentRoot /home/httpd/html
Alias /testalias /home/otherdir

您可以在example.com/testalias/script.php.

脚本将返回:

realpath(dirname(__FILE__)) -> /home/otherdir
$_SERVER['DOCUMENT_ROOT'] -> /home/httpd/html
BASE_DIR -> /home/otherdir
BASE_URL -> /home/otherdir/

然而该网站的其余部分实际上存在于/home/httpd/html

您可能会更幸运地根据 重建 URL $_SERVER['SCRIPT_NAME'],这是 URL 的路径/脚本名称部分:

$_SERVER['SCRIPT_NAME'] -> /testalias/script.php
于 2011-01-08T17:16:00.497 回答