我喜欢它在Zend Framework中的工作原理。我可以通过检查控制器中的APPLICATION_ENV常数来了解我当前使用的环境。
<VirtualHost *:80>
#ServerName
#DocumentRoot
SetEnv APPLICATION_ENV "development"
# Directory
</VirtualHost>
但不幸的是我不能在我当前的项目中使用ZF。如何在PHP代码中检查此环境变量?
答案 0 :(得分:44)
由于SetEnv设置了Apache环境的值,您可以使用
获取它apache_getenv
- 获取Apache subprocess_env变量或只是
getenv
- 获取环境变量的值如果您在ZF项目中查看public/index.php
,您会看到ZF使用getenv
:
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') :
'production'));
经常使用的替代方法是从PHP读取Hostname并相应地定义常量:
if(!defined('APPLICATION_ENV')) {
if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
define(APPLICATION_ENV, 'development');
} else {
define(APPLICATION_ENV, 'production');
}
}
这样,您根本不必依赖环境设置。
答案 1 :(得分:11)
SetEnv
定义了一个环境变量。
设置(在Apache的配置或系统级别)之后,您可以使用getenv
函数读取其值:
echo getenv('APPLICATION_ENV');
例如,如果您在.htaccess
文件中使用此内容:
SetEnv TEST glop
您可以使用这部分PHP代码:
var_dump(getenv('TEST'));
你会得到:
string 'glop' (length=4)
答案 2 :(得分:0)
我有同样的问题然后我解决了它。解决问题的方法是在apache init脚本中声明所有变量。
我在centos上使用apache,init脚本位于/etc/init.d/httpd
添加此代码,但更改它以符合您的具体情况。
ORACLE_HOSTNAME=ora11g.home.com; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=ora11g; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
这解决了我的问题。我希望这有帮助。
答案 3 :(得分:0)
您也可以从$_SERVER
变量访问它。