包含PHP的数组警告

时间:2017-01-25 10:19:24

标签: php mysql arrays environment

我在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()将环境变量转储到屏幕上时,索引和内容都很好。

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您想使用环境变量,请使用getenvputenv

或使用.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 :(得分:-1)

简单的解决方案是,从文件中返回简单数组。如

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

在其他档案中

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

使用$credentials数组为mysql连接函数提供参数