通过虚拟主机configuration设置Application_ENV并在PHP中读取
我喜欢这在Zend Framework中如何工作。 我可以通过在我的控制器中检查APPLICATION_ENV常量来知道我当前正在使用哪个环境。
<VirtualHost *:80> #ServerName #DocumentRoot SetEnv APPLICATION_ENV "development" # Directory </VirtualHost>
但不幸的是我不能在我目前的项目中使用ZF。 我如何检查我的PHP代码中的这个环境variables?
由于SetEnv将值设置为Apache环境,因此可以使用它
-
apache_getenv
– 获取一个Apacheapache_getenv
variables
要不就
-
getenv
– 获取环境variables的值
如果您在ZF项目中查看public/index.php
,您将看到ZF使用getenv
:
// Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
经常使用的替代方法是从PHP读取主机名并相应地定义常量:
if(!defined('APPLICATION_ENV')) { if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) { define(APPLICATION_ENV, 'development'); } else { define(APPLICATION_ENV, 'production'); } }
这样,你不必依赖于环境设置。
SetEnv
定义了一个环境variables。
一旦设置完成(无论是在Apache的configuration还是在系统级别) ,您都可以使用getenv
函数来读取它的值:
echo getenv('APPLICATION_ENV');
例如,如果你在你的.htaccess
文件中使用这个:
SetEnv TEST glop
您可以使用这部分PHP代码:
var_dump(getenv('TEST'));
你会得到:
string 'glop' (length=4)
我有同样的问题,然后我解决了它。 解决问题的方法是在apache init脚本中声明所有的variables。
我在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
这解决了我的问题。 我希望这有帮助。
您也可以从$_SERVER
variables中访问它。