我将各种PHP应用程序开发到不同的环境。尤其是在开发环境上,它们可以在任何地方,从document_root到/users/me/sites/derv/eusers/me/sites/soseapp/someapp/

在这些应用程序中,我需要知道“应用程序root”在哪里,曾经是真实的路径,一次是URL。路径没问题。假设我在App root Directory中有一个Bootstrap.php,它可以:

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

但是,我有问题可靠地获取基本URL。在大多数环境中

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

现在,我的问题是:这在我的应用程序中位于用户目录内的环境中不起作用,因为PHP仍然看到了主要文档根。有人解决了这个问题吗?

有帮助吗?

解决方案

当服务器的配置为别名时,涉及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重建URL $_SERVER['SCRIPT_NAME'], ,这是URL的路径/脚本名称部分:

$_SERVER['SCRIPT_NAME'] -> /testalias/script.php
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top