Иногда мой домен (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.
Вывод базы данных.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 выглядит так. конечно, идентифицируемые значения изменяются на х
<?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. В качестве первого элемента в массиве возвращается ошибка.
Ваш лучший выстрел — проверить variables_order
струна на вас php.ini
файл, он контролирует порядок загрузки суперглобальных и какие переменные вы хотите иметь, скорее всего, вы пропустите E в variables_order
строка.
Из справочных страниц по PHP:
Строка variable_order
Устанавливает порядок разбора переменных EGPCS (Environment, Get, Post, Cookie и Server). Например, если для variable_order задано значение «SP», тогда PHP создаст суперглобальные переменные $ _SERVER и $ _POST, но не создавать $ _ENV, $ _GET и $ _COOKIE. Установка на «» означает, что суперглобальные значения не будут установлены.
Узнайте больше здесь Страницы руководства по PHP
Я думаю, что вы загружаете $_ENV
только локально, так как у вас, вероятно, разные php.ini
файлы.
Очевидно, что когда вы получаете это сообщение об ошибке, это потому, что ваш $_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