2008-09-21 6 views
6

अगर मशीन ऑरैकल (oci8 and/or pdo_oci) स्थापित है, तो PHP का उपयोग करके मैं कैसे पता लगा सकता हूं?अगर मशीन ऑरैकल (oci8 और/या pdo_oci) स्थापित है, तो PHP का उपयोग करके मैं कैसे पता लगा सकता हूं?

मैं PHP प्रोजेक्ट पर काम कर रहा हूं जहां कुछ डेवलपर्स, जैसे कि मैंने इसे स्थापित किया है, लेकिन इन्हें रखने वालों के लिए बहुत कम आवश्यकता है। कोड में उपयोग करने के लिए मैं एक त्वरित फ़ंक्शन कैसे लिख सकता हूं ताकि मेरे थीमर्स साइट पर नज़र डालने के बिना काम कर सकें?

उत्तर

4

यदि ओसीआई विस्तार स्थापित नहीं है, तो आप एक गंभीर त्रुटि farside साथ मिल जाएगा। myopenid.com का उत्तर, आप function_exists ('oci_connect') या extension_loaded ('oci8') का उपयोग कर सकते हैं (या जिसे एक्सटेंशन वास्तव में बुलाया जाता है)

0

मैं अगर मैं पूरी तरह से अपने प्रश्न समझ में नहीं जानता लेकिन एक आसान तरीका यह करने के लिए होगा:

<?php 
    $connection = oci_connect('username', 'password', 'table'); 
    if (!$connection) { 
    // no OCI connection. 
    } 
?> 
0

जैसा कि ग्रेग द्वारा ऊपर वर्णित है, प्रोग्रामेटिक रूप से आप function_exists() विधि का उपयोग कर सकते हैं। यह न भूलें कि अपने PHP के साथ सभी पर्यावरण निर्देश देखने के लिए निम्नलिखित का उपयोग कर सकते मत का उपयोग कर स्थापित करें निम्नलिखित:

<?php 
phpinfo(); 
?> 
+0

हां ... लेकिन यह सिर्फ स्क्रीन पर विनिर्देशों को प्रिंट करता है। मैं यह जानना चाहता हूं कि विनिर्देश क्या हैं और स्क्रीन पर चीजें मुद्रित नहीं करते हैं। –

1

लोग यहाँ समाधान के टुकड़े हैं, लेकिन यह सब एक समाधान में रोल करते हैं।

एक ओरेकल फ़ंक्शन के केवल एक उदाहरण के लिए, function_exists() के साथ परीक्षण पर्याप्त है; लेकिन अगर कोड ओसीआई कॉल के दौरान छिड़क दिया जाता है, तो यह function_exists() परीक्षण में प्रत्येक को लपेटने के लिए गधे में एक बड़ा दर्द होने जा रहा है।

इसलिए, मुझे लगता है कि सबसे सरल समाधान है कि कुछ इस तरह लग सकता है nodatabase.php नामक एक फ़ाइल बनाने के लिए होगा:

<?php 
// nodatabase.php 
// explicitly override database functions with empty stubs. Only include this file 
// when you want to run the code without an actual database backend. Any database- 
// related functions used in the codebase must be included below. 
function oci_connect($user, $password, $db = '', $charset='UTF-8', $session_mode=null) 
{ 
} 

function oci_execute($statement, $mode=0) 
{ 
} 
// and so on... 

फिर, सशर्त इस फ़ाइल को शामिल करता है, तो एक वैश्विक (जैसे कि, THEME_TESTING) को डेटाबेस कोड कहा जाता है, इसके ठीक पहले परिभाषित किया गया है। इस तरह के एक ऐसी लग सकती है शामिल हैं:

// define("THEME_TESTING", true) // uncomment this line to disable database usage 
if(defined(THEME_TESTING)) 
    include('nodatabase.php'); // override oracle API with stub functions for the artists. 

अब, जब आप कलाकारों के लिए परियोजना को सौंपने, वे बस यह है कि एक संशोधन और वे जाने के लिए अच्छा कर रहे हैं बनाने की जरूरत है।

+0

यह आदर्श होगा यदि मैं सभी कोड के नियंत्रण में था। दुर्भाग्यवश, सभी सीधे ऑरैक-इंटरफेसिंग कोड को हमारे ग्राहकों द्वारा बनाए रखा और अपडेट किया जाता है, और यह oci8 और pdo_oci दोनों का उपयोग करता है। इसलिए, मुझे सच में यकीन नहीं है कि यह समाधान काम करेगा - नहीं कि मैं इसे सोमवार को कोशिश नहीं करूंगा। –

+0

कुंजी यह है कि वास्तविक कार्यों को वास्तव में बुलाए जाने से पहले आपको स्टब फ़ंक्शन लोड करने में सक्षम होना चाहिए। यदि ऐसा है, तो आपको अवधारणा का काम करने में सक्षम होना चाहिए: दस्तावेज़ जो ओसीआई/पीडीओ कॉल का उपयोग किया जाता है, एक स्टब फ़ंक्शन लाइब्रेरी/कंकाल वर्ग लिखें, और सशर्त रूप से कक्षा को आवश्यकतानुसार शामिल करें। –

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

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