2009-04-17 12 views
16

अगर मैं इस तरह की एक hello.php फ़ाइल है:क्या आप एक चर फ़ाइल में एक PHP फ़ाइल प्रस्तुत कर सकते हैं?

Hello, <?php echo $foo; ?>! 

मैं कुछ php कोड में कुछ इस तरह करना चाहते हैं:

$text = renderPhpToString('hello.php', array('foo'=>'World')); 

और

$text == 'Hello, World!' 
साथ खत्म

क्या यह मानक PHP 5 के साथ संभव है? जाहिर है मैं छोरों के साथ और बहुत आगे है और अधिक जटिल टेम्पलेट्स चाहते ..

उत्तर

36

आप इस तरह की कुछ समारोह इस्तेमाल कर सकते हैं:

function renderPhpToString($file, $vars=null) 
{ 
    if (is_array($vars) && !empty($vars)) { 
     extract($vars); 
    } 
    ob_start(); 
    include $file; 
    return ob_get_clean(); 
} 

यह उत्पादन बफर नियंत्रण समारोह ob_start() का उपयोग करता है निम्नलिखित उत्पादन बफ़र होना जब तक यह ob_get_clean() द्वारा लौटाई गई।

संपादित है कि आप डेटा इस समारोह के लिए पारित किया ताकि $vars एक file तत्व यह है कि पारित कर दिया $file तर्क मान को ओवरराइड होगा है नहीं है मान्य सुनिश्चित करें।

+3

बेहतर आशा किसी को $ वार्स = सरणी ('फ़ाइल' => 'http://example.com/hax.php') –

+0

नहीं भेजता इस्तेमाल कर सकते हैं यह वही है जो मैं ढूंढ रहा हूं। मेरे मामले में उपयोगकर्ता इनपुट के बारे में चिंता करने की कोई आवश्यकता नहीं है। धन्यवाद! – danb

+1

>> मेरे मामले में उपयोगकर्ता इनपुट के बारे में चिंता करने की कोई आवश्यकता नहीं है। आप यहां उपयोगकर्ता इनपुट के बारे में चिंतित नहीं हैं; एक भविष्य डेवलपर $ vars = array ('file' => 'http://example.com/whoops.php') के साथ फ़ंक्शन को कॉल कर सकता है, और उसके बाद इसे डिबगिंग करने में काफी समय व्यतीत कर सकता है। –

1

आप इसे output buffering के साथ कर सकते हैं, लेकिन कई टेम्पलेट इंजनों में से किसी एक का उपयोग करने के बेहतर हो सकता है।

2

जैसा कि गम्बो ने कहा था कि आपको $ फ़ाइल चर के लिए जांच करनी है, यह एक सूक्ष्म बग है जो मुझे पहले ही काट चुकी है। मैं func_get_arg (i) का उपयोग करता हूं और इसमें कोई चर नहीं है, और मामूली बात है, मैं आवश्यकता का उपयोग करूंगा।

function renderPhpToString() 
{ 
    if(is_array(func_get_arg(1))) { 
     extract(func_get_arg(1)); 
    } 
    ob_start(); 
    require func_get_arg(0); 
    return ob_get_clean(); 

} 
+0

क्यों न केवल '$ vars = [] '? –

2

$vars = array('file' => '/etc/passwd'); गुजर के बारे में है, तो आप extract($vars, EXTR_SKIP);

+0

आईएमएचओ अगर आपको लगता है कि आपको 'EXTR_SKIP' की आवश्यकता हो सकती है, तो आपको यह विचार करना चाहिए कि कोई बेहतर समाधान नहीं है या नहीं। –

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

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