来自一个域的API调用的错误代码,但不是其他未定义的索引:

alb*_*lbo 11 php amazon-ec2

在进行任何API调用时,有时我的域(example.test.org)会向我显示错误.

"{"error":{"code":500,"message":"Undefined index: DB_HOST","file":"\/var\/www\/app\/config\/production\/database.php","line":7}}".
Run Code Online (Sandbox Code Playgroud)

但是使用我本地机器的公共IP它正在工作.有什么理由会从一个域而不是另一个域返回错误?API在Laravel 4.2上运行.

database.php的输出是

<?php

return array(
  'default' => 'pgsql',
  'connections' => array(
    'pgsql' => array(
      'host'     => $_ENV['DB_HOST'],
      'port'     => $_ENV['DB_PORT'],
      'database' => $_ENV['DB_NAME'],
      'username' => $_ENV['DB_USER'],
      'password' => $_ENV['DB_PASS'],
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

这些值来自/var/www/.env.php,看起来像

return array(
  'DB_HOST'    => 'my-app.cvrrctfasmvk.us-east-1.rds.amazonaws.com',
  'DB_PORT'    => '*****',
  'DB_NAME'    => '**************',
  'DB_USER'    => '**********',
  'DB_PASS'    => '***********',
  'SMTP_HOST'  => '*******************',
  'SMTP_USER'  => '***********************',
  'SMTP_PASS'  => '********************************',
  'AWS_KEY'    => '****************************',
  'AWS_SECRET' => '*******************',
  'AWS_QUEUE'  => '*****************************************',
  'FB_APP_ID'  => '*****************',
  'FB_APP_SECRET' => '*********************' 
);
Run Code Online (Sandbox Code Playgroud)

顺便说一下,DB Host文件看起来像这样.当然,可识别的值被改为x

<?php

return array(
  'DB_HOST'    => 'my-app-.xxxxxx.us-east-1.xxx.amazonaws.com',
  'DB_PORT'    => 'xxxx',
  'DB_NAME'    => 'xxxx_app_xxx_db',
  'DB_USER'    => 'xxxx',
  'DB_PASS'    => 'xxxx',
  'SMTP_HOST'  => 'email-xxx.xxxx.amazonaws.com',
  'SMTP_USER'  => 'xxxxxxx',
  'SMTP_PASS'  => 'xxxx',
  'AWS_KEY'    => 'xxx',
  'AWS_SECRET' => 'xxxx',
  'AWS_QUEUE'  => 'https://sqs.xxxxx.amazonaws.com/xxxx',
  'FB_APP_ID'  => 'xxxxx',
  'FB_APP_SECRET' => 'xxxx' 
);
Run Code Online (Sandbox Code Playgroud)

看起来它在阅读/var/www/.env.php文件时遇到了问题.由于数组中的第一项是返回错误.

mrb*_*rbm 2

最好的办法是检查文件variables_order中的字符串php.ini,它确实控制超级全局加载的顺序以及您想要的变量,很可能您在字符串中缺少variables_orderE。

来自 PHP 手册页:

Variables_order string 设置EGPCS(Environment、Get、Post、Cookie 和 Server)变量解析的顺序。例如,如果变量_order 设置为“SP”,则 PHP 将创建超全局变量 $_SERVER 和 $_POST,但不会创建 $_ENV、$_GET 和 $_COOKIE。设置为“”意味着不会设置超全局变量

在此处阅读更多PHP 手册页

我认为您$_ENV仅在本地加载,因为您可能有不同的php.ini文件。