通过虚拟主机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 – 获取一个Apache apache_getenvvariables

要不就

  • 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 

这解决了我的问题。 我希望这有帮助。

您也可以从$_SERVERvariables中访问它。