2012-05-18 10 views
5

मैं एक PHP स्क्रिप्ट से कुछ चर आयात करने की कोशिश कर रहा हूँ। यह आसान लगता है लेकिन मैं इसे काम नहीं कर सकता।एक अलग PHP स्क्रिप्ट में वैश्विक चर का उपयोग?

स्क्रिप्ट कि जैसे कुछ वैश्विक चर शामिल हैं:

$server_hostname = "localhost"; 
$server_database = "kimai"; 
$server_username = "root"; 
$server_password = ""; 
$server_conn  = "mysql"; 
$server_type  = ""; 
$server_prefix = "kimai_"; 
$language  = "en"; 
$password_salt = "7c0wFhYHHnK5hJsNI9Coo"; 
मेरी स्क्रिप्ट में

फिर, मैं इन चर का उपयोग करना चाहते हैं, तो मैं किया है:

require_once 'includes/autoconf.php'; 
var_dump($server_hostname); 

लेकिन यह सिर्फ आउटपुट शून्य। मैंने यह भी कोशिश की है:

require_once 'includes/autoconf.php'; 

global $server_hostname;  
var_dump($server_hostname); 

लेकिन अभी भी काम नहीं कर रहा है।

मैंने "autoconf.php" फ़ाइल में कुछ echo कथन जोड़े हैं, इसलिए मुझे पता है कि यह लोड हो रहा है।

कोई विचार है कि मैं इन चरों को कैसे एक्सेस कर सकता हूं?

global $server_hostname; 
$server_hostname = "localhost"; 
+0

यदि उन्हें किसी फ़ंक्शन में परिभाषित किया गया है तो यह उस कार्य के लिए निजी होगा। यहां तक ​​कि यदि आप वैश्विक कहीं और – IEnumerable

+0

का उपयोग करते हैं, तो वे फ़ंक्शन में नहीं हैं। मैंने जो कोड पोस्ट किया वह पूरा कोड है। –

+0

क्या आपके पास कोई अन्य त्रुटियां हैं, सिवाय इसके कि वेरिएबल नामस्थान में प्रतीत नहीं होता है? त्रुटियों को छुपाए जाने पर त्रुटि आउटपुट को सक्रिय करें। –

उत्तर

2

यह पता चला फ़ाइल कहीं आवेदन इसलिए जब मैं require_once बुला रहा था में सब शामिल किया गया था, फ़ाइल सब पर शामिल नहीं किया जा रहा था। मैंने इसे require में बदल दिया और अब यह काम करता है।

2

आप वैश्विक पहले के रूप में चर को परिभाषित करने के लिए है।

require_once 'includes/autoconf.php'; 

जांच वर्तमान काम निर्देशिका है जहाँ आप शामिल autoconf.php

इस

if (file_exists('includes/autoconf.php')) require_once 'includes/autoconf.php'; 
else echo 'File not exists'; 

यह बाहर की जाँच की कोशिश करो।

+1

लेकिन वैसे भी, मुझे नहीं लगता कि यदि आप बाद में एक आलसी या आवश्यकता करते हैं तो इसकी आवश्यकता होती है, जैसा कि आपने कोशिश की थी, इसे काम करना चाहिए। – djot

+1

मेरी समझ यह है कि किसी भी फ़ंक्शन या ब्लॉक के बाहर घोषित चर पहले से ही वैश्विक दायरे में हैं (http://php.net/manual/en/language.variables.scope.php) इसके अलावा मैं सीधे इस स्क्रिप्ट को संशोधित नहीं कर सकता इसलिए मुझे चाहिए किसी अन्य तरीके से चर का उपयोग करने के लिए। –

+0

वे वैश्विक दायरे में हैं लेकिन अन्य फाइलों या कार्यों में आपको वैश्विक $ varname जोड़ने की आवश्यकता है; – IEnumerable

1

हो सकता है कि फ़ाइल ठीक से शामिल नहीं किया गया:

0

निरंतर उपयोग करने के बारे में कैसे?

परिभाषित ("server_hostname", "localhost"); परिभाषित करें ("server_hostname", "localhost");

+0

मैं इस autoconf.php फ़ाइल में कोड नहीं बदल सकता। बेशक, अगर मैं बस किसी भी वैश्विक चर का उपयोग करने से बच सकता। –

+0

सत्य लेकिन यह स्थिर नहीं है, परिवर्तनीय नहीं – IEnumerable

+1

जो वैसे भी अर्थपूर्ण है। तथ्य यह है कि एक चर लोड नहीं होता है, इसका मतलब है कि स्थिर भी लोड नहीं किया जाएगा। एक लोडिंग मुद्दा है। –

0

आप फ़ाइल को शामिल और चर एक सादा पाठ में है, और एक समारोह/वर्ग इसके बिना वैश्विक

अपने php.ini पर जाएं काम करता है अंदर नहीं और पर = display_errors रख दिया और त्रुटियों तो E_ALL को तो आप देखेंगे कि सही कारण क्या है

0

यह बुरा है, लेकिन यह काम पूरा हो सकता है।

<? //PHP 5.4+ 
\call_user_func(static function(){ 
    $globals = \get_defined_vars(); 
    include 'includes/autoconf.php'; 
    $newVars = \array_diff_key($globals, \get_defined_vars()); 
    foreach($newVars as $name => $value){ 
     \define($name, $value); 
    } 
}); 
//Variables defined in file are now constants! 
?> 
संबंधित मुद्दे