2017-01-18 6 views
11

कभी-कभी मेरा डोमेन (example.test.org) मुझे कोई एपीआई कॉल करते समय त्रुटि दिखा रहा है।एक डोमेन से एपीआई कॉल से त्रुटि कोड, लेकिन अन्य अपरिभाषित इंडेक्स नहीं:

"{"error":{"code":500,"message":"Undefined index: DB_HOST","file":"\/var\/www\/app\/config\/production\/database.php","line":7}}". 

लेकिन मेरी स्थानीय मशीन के सार्वजनिक आईपी के साथ यह काम कर रहा है। किसी भी कारण से यह एक डोमेन से एक त्रुटि लौटाएगा लेकिन दूसरा नहीं? एपीआई लैरावेल 4.2 पर चल रहा है।

database.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' => '*********************' 
); 

डीबी होस्ट फ़ाइल माध्यम से इस तरह दिखता है । साथ निश्चित रूप से पहचाने जाने योग्य मान x

<?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 फ़ाइल को पढ़ने हो रही है। जैसा कि सरणी में पहला आइटम एक त्रुटि लौटा रहा है।

+1

बस जांचें कि आपके संपादक ने फ़ाइल में कोई मजाकिया, छुपे हुए अक्षर नहीं डाले हैं। टेक्स्ट "'DB_HOST' चुनें और हटाएं (एक समय में एक वर्ण को न हटाएं, जब तक कि आपके पास वीआईएम आदि में कोई विकल्प न हो, लेकिन सभी का चयन करें और हटाएं) और फिर पुनः टाइप करें। – Robbie

उत्तर

2

आपका सबसे अच्छा शॉट php.ini फ़ाइल आप पर अपने variables_order स्ट्रिंग की जांच करना है, यह सुपर वैश्विक लदान और जो चर आप करना चाहते हैं के आदेश को नियंत्रित करता है, सबसे शायद आप variables_order स्ट्रिंग में एक ई वंचित रह जाएंगे।

पीएचपी आदमी पृष्ठों से:

variables_order स्ट्रिंग सेट EGPCS (पर्यावरण, जाओ, डाक, कुकी, और सर्वर) चर पार्स के आदेश। उदाहरण के लिए, यदि variables_order "एसपी" पर सेट किया गया है तो PHP सुपरग्लोबल्स $ _SERVER और $ _POST बनाएगा, लेकिन $ _ENV, $ _GET और $ _COOKIE नहीं बनायेगा। पर सेट करना मतलब है कि कोई superglobals सेट नहीं किया जाएगा।

PHP man pages

मुझे लगता है कि आप $_ENV लोड कर रहे हैं केवल स्थानीय रूप से, जब से तुम शायद अलग php.ini फ़ाइलें यहां अधिक पढ़ें।

1

स्पष्ट रूप से, जब आपको यह त्रुटि संदेश मिलता है, तो ऐसा इसलिए होता है क्योंकि आपके $_ENV चर में 'DB_HOST' अनुक्रमणिका नहीं है।

कभी कभी वातावरण चर superglobal $_ENV में मौजूद नहीं हैं लेकिन मैं सिर्फ अपनी वेब सर्वर (चल पीएचपी 5.5.9) पर इस परीक्षण किया है getenv()

साथ दिलवाया जा सकता है: तो

<?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 
संबंधित मुद्दे