Код ошибки вызова API из одного домена, но не из другого неопределенного индекса:

Иногда мой домен (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. В качестве первого элемента в массиве возвращается ошибка.

11

Решение

Ваш лучший выстрел — проверить 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 файлы.

2

Другие решения

Очевидно, что когда вы получаете это сообщение об ошибке, это потому, что ваш $_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
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector