2017-01-25 38 views
0

phpの配列に問題があります。これは、さまざまな環境の構成データを格納するために使用します。私が考えるのは、ローカルテストからサーバー上で使用するときにconfigデータでファイルを切り替えるだけです。ファイルには、次のようになります。PHP組み込み警告警告

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

そして、私はそれをこのように、次のとおり、その事実を無視して

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

:私はこのようにそれを使用したデータベースへの接続のために

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

を私はまだPDOかmysqliの代わりにmysqlを使用しています。これはすぐに変更するつもりですが、これはうまくいくはずです。しかし、それはしていません:

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

奇妙なことは、私はのvar_dumpで画面上に環境変数をダンプするとき()インデックスと内容がすべてうまくあるということです。

誰でもこれを解決する方法を知っていますか?

+0

コードが実際に含まれている、あなたが最初require' 'に' include'を変更する必要があることを確認します。おそらく、同じリクエスト中に別のインクルード/スクリプトからロードされたインクルードは同じですか? – 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"; 

あなたは、環境変数がgetenvを使用して作業したい場合はmysqlの接続機能

+0

提案された解決策では、問題はありません。私はそれを使用します。 envメソッドは実装されていません。 ;-) – Shubhranshu

1

にパラメータを供給する$credentials配列を使用して、putenv

として、あるいは.envファイルを使用してください(パッケージhere、docs 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" way:

.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