6

这是对这个问题的一个扩展,我们了解到我们可以使用 var 设置一个$_SERVERvar SetEnv

下一个问题是:有没有办法像这样使用 SetEnv:

/var/www/www.example.com/module/unique_section/.htaccess:

SetEnv RESOURCE_ROOT %{DIRECTORY}

/var/www/www.example.com/module/unique_section/some/path/file.php

<?php echo $_SERVER['RESOURCE_ROOT']; ?>

输出:/var/www/www.example.com/module/unique_section/

4

3 回答 3

6

根据您需要的信息,您可以使用RewriteRule. 例如:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]

将设置 PHP var$_SERVER['RESOURCE_ROOT']$_SERVER['REDIRECT_RESOURCE_ROOT']您的 Apache 文档根目录。有关完整详细信息,请参阅mod_rewrite 手册%{DOCUMENT_ROOT},但,%{PATH_INFO}和的某些组合%{REQUEST_FILENAME}可能对您有用。

我认为文件不可能.htaccess知道它所在的目录。所以我认为您需要在.htaccess文件中使用硬编码路径。举个例子:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1/module/unique_section/]
于 2012-06-28T20:44:59.237 回答
4

据我所知, setEnv 无权访问 apache 环境变量。因此 %{DIRECTORY} 将不起作用,除非您希望该值专门为“%{DIRECTORY}”。使用 mod_rewrite,这对我来说可以获取正在加载的文件的路径:

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} ((.*)/)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]

输出:

var_dump(__FILE__);
//outputs: string(27) "/var/www/sub/test/index.php" 
var_dump($_SERVER['RESOURCE_ROOT']);
//outputs: string(24) "/var/www/sub/test/"

除此之外,仅使用 php 并做dirname(__FILE__)or有什么问题dirname($_SERVER['PHP_SELF'])吗?

于 2012-06-28T20:49:35.433 回答
2

您可以使用该功能apache_getenv来获得您想要的东西。

链接: http: //php.net/manual/en/function.apache-getenv.php

不要忘记阅读文档:

此功能需要 Apache 2,否则未定义。

例子 :

<?php
$ret = apache_getenv("SERVER_ADDR");
echo $ret;
?>

上面的示例将输出类似于:

42.24.42.240

但是,正如这个威胁中所建议的那样,您可以只使用dirname(__FILE__)并且从 PHP 5.3.0 开始,您可以将__DIR__其用作魔术常量。

于 2012-06-28T20:53:23.233 回答