2012-04-13 6 views
8

संभव डुप्लिकेट:
Execute a PHP file, and return the result as a string
PHP capture print/require output in variableसामग्री को स्ट्रिंग के रूप में शामिल करने के लिए कैसे करें?

मैं एक की सामग्री को एक स्ट्रिंग को शामिल होने की कोशिश कर रहा हूँ। क्या यह संभव है?

उदाहरण के लिए, अगर मैं एक test.php फ़ाइल है: मैं एक समारोह की जरूरत

<?php 
echo 'a is equal to '.$a; 
?> 

, test.php शामिल हैं और वापस जाने के उत्पादन के लिए एक स्ट्रिंग में में से क्या होगा करने के लिए include_to_string बोलें।

कुछ की तरह:

<?php 
$a = 4; 
$string = include_to_string(test.php); // $string = "a is equal to 4" 
?> 
+0

@safarov मेरा अनुमान है कि यह वाला नहीं है उसकी चर –

+0

का मूल्यांकन मुझे लगता है कि यह test.php फ़ाइल में एक $ स्थानापन्न नहीं होंगे। मुझे जाँचने दो। – ppp

उत्तर

28
<?php 

    ob_start(); 
    include 'test.php'; 
    $string = ob_get_clean(); 

मुझे लगता है कि तुम क्या चाहते है। output buffering देखें।

+1

उस तकनीक को उत्सुकता के लिए आउटपुट बफरिंग कहा जाता है। –

+0

@ Xeon06 जब आप टिप्पणी लिख रहे थे तो बस एक मैनुअल लिंक जोड़ा! प्रोड के लिए चीयर्स हालांकि :-) – DaveRandom

+0

@nickb [नहीं यह नहीं है] (http://php.net/manual/en/function.ob-get-clean.php), 'ob_end_clean() 'रिटर्न' बूल '। 'ob_get_clean()' 'str str = ob_get_contents() को कॉल करने के लिए एक शॉर्टकट है; ob_end_clean(); ' – DaveRandom

5
ob_start(); 
include($file); 
$contents = ob_get_contents(); // data is now in here 
ob_end_clean(); 
3

आप output buffering के साथ ऐसा कर सकते हैं:

function include2string($file) { 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

@DaveRandom अंक बाहर (सही) एक समारोह में इस लपेटकर के साथ मुद्दा यह है कि अपनी स्क्रिप्ट ($ फ़ाइल) के लिए पहुँच नहीं होगा कि वैरिएबल परिभाषित वैश्विक स्तर पर। हो सकता है कि गतिशील रूप से शामिल कई स्क्रिप्ट्स के लिए यह कोई समस्या न हो, लेकिन यदि यह आपके लिए कोई समस्या है तो इस तकनीक का उपयोग फ़ंक्शन रैपर के बाहर (जैसा कि अन्य दिखाया गया है) किया जा सकता है।

** चर आयात करना एक चीज जो आप कर सकते हैं वह डेटा का एक सेट जोड़ना है जिसे आप अपनी स्क्रिप्ट को चर के रूप में उजागर करना चाहते हैं। इसके बारे में सोचें जैसे टेम्पलेट में डेटा पास करना।

include2string('foo.php', array('key' => 'value', 'varibleName' => $variableName)); 

और अब $key और $variableName अपने foo.php फाइल के अंदर दिखाई होगा:

function include2string($file, array $vars = array()) { 
    extract($vars); 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

आप इसे इस तरह से कहेंगे।

यदि आप स्पष्ट रूप से दिखते हैं तो आप अपनी स्क्रिप्ट के लिए "आयात" करने के लिए वैश्विक चर की एक सूची भी प्रदान कर सकते हैं।

function include2string($file, array $import = array()) { 
    extract(array_intersect_key($GLOBALS, array_fill_keys($import, 1))); 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

और आप इसे कहेंगे, आप स्क्रिप्ट को उजागर करना चाहते वैश्विक की एक सूची उपलब्ध कराने के:

$foo='bar'; 
$boo='far'; 
include2string('foo.php', array('foo')); 

foo.phpfoo, लेकिन नहीं boo को देखने के लिए सक्षम होना चाहिए।

+0

फ़ंक्शन में इसे लपेटने में समस्या परिवर्तनीय गुंजाइश है ... – DaveRandom

+0

@DaveRandom, अच्छी कॉल। – Prestaul

+0

यही वह है जो मैं गलत कर रहा था। मैं इस विधि को किसी अन्य उत्तर में आया, लेकिन मुझे एक अविकसित चर त्रुटि मिली क्योंकि चर के कार्य के दायरे के बाहर चर घोषित किए गए थे। – ppp

0

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

// How 1th 
$File = 'filepath'; 
$Content = file_get_contents($File); 

echo $Content; 

// How 2th 
function FileGetContents($File){ 
    if(!file_exists($File)){ 
     return null; 
    } 

    $Content = file_get_contents($File); 
    return $Content; 
} 

$FileContent = FileGetContents('filepath'); 
echo $FileContent; 

फंक्शन: file_get_contents

+0

यह सामग्री प्राप्त करता है लेकिन इसमें शामिल PHP में निष्पादित नहीं करेगा और कच्चे PHP कोड को वापस कर देगा। – MrCode

+0

सच है, मैंने ओपी पोस्ट में कीवर्ड निष्पादित नहीं देखा ... मैंने सवाल को गलत समझा होगा। –

+0

@MrCode मुझे लगता है कि आप इसे 'eval() '(बुराई) कर सकते हैं, लेकिन यह अभी भी एक चरम स्कोपिंग समस्या से पीड़ित है जिसे आप इसे किसी फ़ंक्शन में करने से प्राप्त करते हैं और शायद इसे' शामिल()' पहले स्थान पर – DaveRandom

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

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