2012-05-22 14 views
5

से कनेक्ट करने में विफल रहता है तो मुझे एक सीआई इंस्टेंस मिला है जो एक डीबी से कनेक्ट होता है और पृष्ठों की सेवा करने से पहले अनुमतियों को चेक करता है। यदि पृष्ठ वर्तमान उपयोगकर्ता के लिए उपलब्ध नहीं है, तो यह लॉगिन पृष्ठ पर रीडायरेक्ट करता है।पता लगाएं कि जब कोडइग्निटर डीबी

लॉगिन पृष्ठ, जाहिर है, अनुमति सेट है ताकि यह सभी उपयोगकर्ताओं के लिए सुलभ हो।

हाल ही में गड़बड़ के बाद, डेटाबेस सर्वर एक अलग आईपी पते पर वापस आया (धन्यवाद अमेज़ॅन, ईसी 2)। इसके परिणामस्वरूप सीआई किसी भी पेज के लिए अनुमतियों की जांच करने में असमर्थ रहा - लॉग इन सहित। चूंकि कोड हां के अलावा कुछ भी मानता है, इसलिए यह लॉगिन पर रीडायरेक्ट किया गया है। नतीजा एक अनंत रीडायरेक्ट लूप था।

हालांकि यह सटीक समस्या फिर से नहीं होनी चाहिए (स्टेटिक लोचदार आईपी), मैं यह जानना चाहता हूं कि डीबी कनेक्शन कब नीचे है और इसे उचित तरीके से संभाल लें।

मैंने This SO Question देखा है जो मैं प्राप्त करने की कोशिश कर रहा हूं लेकिन मैं किसी भी नियंत्रक में डेटाबेस को स्पष्ट रूप से लोड नहीं कर रहा हूं, यह स्वत: लोड कॉन्फ़िगरेशन फ़ाइल में है।

तो,

मैं कैसे सीआई अंदर से Db कनेक्शन की स्थिति को क्वेरी कर सकते हैं? क्या मुझे बेकार पूछताछ चलाने की ज़रूरत है और जांच करें कि क्या मुझे परिणाम मिलते हैं या क्या कोई और शानदार समाधान है?

संपादित करें: जांच वर्तमान में एक हुक में प्रदर्शन किया जा रहा है:

$hook['post_controller_constructor'] = array(
           'class' => 'AuthHook', 
           'function' => 'ValidateCredentials', 
           'filename' => 'auth.php', 
           'filepath' => 'hooks' 
           ); 

उत्तर

2

"चूंकि कोड हां के अलावा कुछ भी मानता है, इसलिए यह लॉगिन पर रीडायरेक्ट किया गया है।"

इसलिए इसलिए आपको केवल लॉगिन तर्क फ़ंक्शन को बदलने की आवश्यकता है ताकि विशेष रूप से डीबी कनेक्शन (और इस प्रकार डेटाबेस को स्वत: लोड कर सकें) की जांच कर सकें।

तरह

$result = $this->db->conn_id; 
+0

ऐसा लगता है कि मैं परीक्षण कर रहा था - संभवतः यह कोई कनेक्शन नहीं होने पर यह शून्य/अनसेट होगा? – Basic

+3

असल में यह गलत होगा - तो आप "अगर (! $ यह-> डीबी-> conn_id) कर सकते हैं) – Laurence

+0

धन्यवाद, यह अच्छी तरह से काम कर रहा है – Basic

6

आप नियंत्रक का विस्तार और इसके निर्माता में डेटाबेस लोड कर सकते हैं:

class My_Controller extends CI_Controller { 
     public function __construct(){ 
      parent::__construct(); 
      if ($this->load->database() === FALSE) 
      { 
       //do something 
      } 
     } 
    } 

सभी अपने नियंत्रकों नया प्राप्त कर लेंगे नियंत्रक।

+0

कुछ का उपयोग करें कि एक अच्छा तरीका की तरह लगता है जाने के लिए (और मैं देख सकता हूँ अन्य कार्यक्षमता भी वहाँ में निचोड़ा जा रहा है)। हालांकि, ऐसा करने के लिए ऐसा संभव नहीं हो सकता है क्योंकि वर्तमान में एक हुक के अंदर अनुमति जांच की जा रही है। मैंने इसका जिक्र नहीं किया क्योंकि मुझे नहीं लगता था कि यह प्रासंगिक होगा। मैं अधिक जानकारी के साथ क्यू अद्यतन करेंगे। – Basic

+0

आप 'वैरिडेट क्रेडेंशियल्स' कोड को 'parent :: __ निर्माण() के बाद 'My_Controller' के कन्स्ट्रक्टर में' सम्मिलित कर सकते हैं; 'कार्यक्षमता वही रहेगी यदि आपके सभी नियंत्रक' MY_Controller' –

+0

धन्यवाद - यह कुछ है जो मैं हूं भविष्य में होने की संभावना है, लेकिन इस पल के लिए, मुझे लगता है कि @ लॉरेनकाई का जवाब मैंने पूछे गए प्रश्न के करीब है (हालांकि आपका लगता है कि मुझे लंबे समय तक क्या चाहिए)। धन्यवाद – Basic

संबंधित मुद्दे