2017-01-25 6 views
0

У меня возникла проблема с массивом в php, который я использую для хранения данных конфигурации для разных сред. Идея заключается в том, что мне нужно только отключить файл с данными конфигурации при переходе от локального тестирования к его использованию на сервере. Файл выглядит следующим образом:PHP Включено предупреждение о массиве

<?php 
    $_ENV = array(
    'MySQL' => array(
     'database'=>'<DATABASENAME>', 
     'server'=>'<SERVERNAME>', 
     'username'=>'<USERNAME>', 
     'password'=>'<PASSWORD>' 
    ) 
); 
?> 

И я включаю это так:

include('../env.php'); 

Для подключения к базе данных я использую это так:

$conn = mysql_connect($_ENV['MySQL']['server'], $_ENV['MySQL']['username'],$_ENV['MySQL']['password']) or die("No connection possible: " . mysql_error()); 

Игнорируя тот факт, что Я все еще использую mysql вместо PDO или mysqli, что я скоро изменю, это должно сработать. Но это не так:

Notice: Undefined index: MySQL in D:\data\dev\applications\wtc-feedback\dashboard\include\SQLrequest.php on line 36 

Самое странное в том, что, когда я сбросить переменные окружения на экран с var_dump() индексы и содержание все просто отлично.

Кто-нибудь знает, как это исправить?

+0

Чтобы убедиться, что код на самом деле включен, вы должны сначала изменить '' include' к require'. Возможно, это же относится к загрузке из другого include/script во время одного и того же запроса? – jeroen

+1

Вы пробовали переименовать массив? Вы никогда не должны вносить изменения в массив $ _ENV, и, возможно, это запрещено вашей версией php. – Blaatpraat

+1

Код, который вы использовали, должен работать нормально. Ошибка должна быть где-то в другом месте. –

ответ

-1

Простым решением будет, вернуть простой массив из файла. в

<?php 
return array(
'MySQL' => array(
    'database'=>'<DATABASENAME>', 
    'server'=>'<SERVERNAME>', 
    'username'=>'<USERNAME>', 
    'password'=>'<PASSWORD>' 
) 
); 
?> 

В другом файле

$credentials = require_once "../env.php"; 

Используйте $credentials массив для обеспечения параметров в функции соединения тузд

+0

Кстати, в предлагаемом решении проблем нет. Я использую это. хотя он не реализует env-методы. ;-) – Shubhranshu

1

Если Вы хотите работать с экологическими переменными использовать getenv, putenv

или используйте файлы .env (пакет here, документы here) и добавить к .env.gitignore

на самом деле Ваш код должен выглядеть так:

env.php:

<?php 

putenv('DB_NAME=DATABASENAME'); 
putenv('DB_HOST=SERVERNAME'); 
putenv('DB_USER=USERNAME'); 
putenv('DB_PASS=PASSWORD'); 

connection.php:

<?php 

include('../env.php'); 
$conn = mysql_connect(getenv('DB_HOST'), getenv('DB_USER'), getenv('DB_PASS')) 
     OR die("No connection possible: " . mysql_error()); 



".env" способ:

.env файл:

DB_NAME=DATABASENAME 
DB_HOST=SERVERNAME 
DB_USER=USERNAME 
DB_PASS=PASSWORD 

connection.php:

<?php 

require_once('../vendor/autoload.php'); 

use Symfony\Component\Dotenv\Dotenv; 
(new Dotenv())->load(__DIR__.'/../.env'); 

$conn = mysql_connect(getenv('DB_HOST'), getenv('DB_USER'), getenv('DB_PASS')) 
     OR die("No connection possible: " . mysql_error()); 
+1

Извините, неверно прочитайте свой ответ и теперь не можете un-downvote, если ответ не отредактирован. –

+0

Я пробовал это так, но getenv ('DB_NAME') кажется пустым. – Curunir

+1

@Curunir, может быть из-за настроек 'safe_mode_allowed_env_vars'. – yivi

Смежные вопросы