有时我的域名(example.test.org)在进行任何API调用时都会向我显示错误。
"{"error":{"code":500,"message":"Undefined index: DB_HOST","file":"\/var\/www\/app\/config\/production\/database.php","line":7}}".
但是凭借我本地机器的公共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'],
),
),
);
这些值来自/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' => '*********************'
);
顺便说一句,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'
);
看起来它在阅读/var/www/.env.php文件时遇到了麻烦。由于数组中的第一项是返回错误。
答案 0 :(得分:2)
您最好的方法是检查variables_order
文件中的php.ini
字符串,它确实控制了超级全局加载的顺序以及您想要拥有的变量,最有可能是您在variables_order
字符串中遗漏了一个E.
从PHP手册页:
variables_order字符串 设置EGPCS(Environment,Get,Post,Cookie和Server)变量解析的顺序。例如,如果variables_order设置为&#34; SP&#34;然后PHP将创建超级全局$ _SERVER和$ _POST,但不创建$ _ENV ,$ _GET和$ _COOKIE。设置为&#34;&#34; 表示不会设置超级全局。
在此处阅读更多PHP man pages
我认为您只在本地加载$_ENV
,因为您可能有不同的php.ini
个文件。
答案 1 :(得分:1)
显然,当您收到此错误消息时,这是因为您的$_ENV
变量没有'DB_HOST'索引。
有时环境变量不存在于超级全球$_ENV
中,但可以使用getenv()
我刚在我的网络服务器上测试过这个(运行PHP 5.5.9):
<?php
// test.php
echo $_ENV['PATH'];
?>
然后
$ php test.php
PHP Notice: Undefined index: PATH in /tmp/env.php on line 2
虽然这有效:
<?php
// test.php
echo getenv("PATH");
?>
$ php test.php
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games