确定当前环境和请求来源 - 需要定义变量

Posted

技术标签:

【中文标题】确定当前环境和请求来源 - 需要定义变量【英文标题】:Determine the current environment and requesting origin - need to define variable 【发布时间】:2013-11-16 19:23:27 【问题描述】:

除了最后一个变量 $currentEnv = '???' 之外,我几乎完成了所有代码.如何使用这种语法检测当前环境??

/**
     * CORS Implementation to support AJAX requests from mobile site
     * @see http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
     */
    // Define allowed origins per environment
    $allowedOrigins = array(
        'prod' = array(
            'http://m.site.com'
          , 'https://m.site.com'
        )
      , 'staging' = array(
            'http://stg-m.site.com'
          , 'https://stg-m.site.com'
        )
      , 'qa' = array(
            'http://qa-m.site.com'
          , 'https://qa-m.site.com'
        )
    );

    // Determine the current environment and requesting origin
    $httpOrigin = $_SERVER['HTTP_ORIGIN'];
    $currentEnv = "prod"; **// Something that determines the environment...**

    // Allow only if all points match
    if ( isset($allowedOrigins[$currentEnv])
      && in_array($httpOrigin, $allowedOrigins[$currentEnv])
    )
      header("Access-Control-Allow-Origin: $httpOrigin");
      header("Access-Control-Allow-Methods: POST, GET");
    

【问题讨论】:

WTH 是当前环境、开发、生产?谁定义了这个,它应该来自哪里? 我正在配置它,以便我只需要一个函数来包含在三个代码库中,它将在标题中返回原点。 我可以简单地将源定义为'site.com',但我想使用一个 var 来检测环境并根据哪个主机创建它 【参考方案1】:

总体上必须有更好的方法来做到这一点,但问题是:

$httpOrigin = $_SERVER['HTTP_ORIGIN'];

foreach($allowedOrigins as $env => $url) 
    if(in_array($httpOrigin, $url)) 
        $currentEnv = $env;
        break;
    

【讨论】:

【参考方案2】:

我不敢相信我以前没有想到这一点......解决方案:

/**
* CORS Implementation to support AJAX requests from mobile site
* @see http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
*/
// Define allowed origins per environment
$allowedOrigins = array(
    'prod' = array(
        'http://m.site.com'
      , 'https://m.site.com'
    )
  , 'staging' = array(
        'http://stg-m.site.com'
      , 'https://stg-m.stie.com'
    )
  , 'qa' = array(
        'http://qa-m.site.com'
      , 'https://qa-m.site.com'
    )
);

// Determine the current environment and reqesting origin
switch( $_SERVER['SERVER_NAME'] )

  case 'site.com': // fall-thru
  case 'www.site.com':
    $currentEnv = 'prod';
    break;
  case 'stg.site.com':
    $currentEnv = 'staging';
    break;
  case 'qa.site.com':
    $currentEnv = 'qa';
    break;
  default:
    $currentEnv = 'unknown';

$httpOrigin = $_SERVER['HTTP_ORIGIN'];

// Allow only if all points match
if ( isset($allowedOrigins[$currentEnv])
  && in_array($httpOrigin, $allowedOrigins[$currentEnv])
)
  header("Access-Control-Allow-Origin: $httpOrigin");
  header("Access-Control-Allow-Methods: POST, GET");

解决了!

【讨论】:

以上是关于确定当前环境和请求来源 - 需要定义变量的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter-接口环境变量设置

JRE_HOME 环境变量未正确定义竹错误

环境变量说明

shell 脚本语言学习

shell 编程

shell基础2