这是this question的一种表现,我们知道可以使用$_SERVER
设置SetEnv
var。
接下来的问题是:有没有办法像这样使用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/
答案 0 :(得分:5)
根据您需要的信息,可以使用RewriteRule
执行此操作。例如:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]
将PHP var $_SERVER['RESOURCE_ROOT']
或$_SERVER['REDIRECT_RESOURCE_ROOT']
设置为Apache Document Root。有关详细信息,请参阅the mod_rewrite manual,但%{DOCUMENT_ROOT}
,%{PATH_INFO}
和%{REQUEST_FILENAME}
的某些组合可能适合您。
我认为.htaccess
文件不可能知道它所在的目录。所以我认为你需要在.htaccess
文件中使用硬编码路径。举个例子:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1/module/unique_section/]
答案 1 :(得分: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__)
或dirname($_SERVER['PHP_SELF'])
是否有任何问题?
答案 2 :(得分: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__
作为魔术常量。