हैक चेतावनी! PHP ब्लॉक को खोजने और बदलने के लिए आप preg_replace_callback
का उपयोग करके कुछ हैकररी के साथ स्वयं PHP का मूल्यांकन कर सकते हैं।
function evalCallback($matches)
{
// [0] = <?php return returnOrEcho("hi1");?>
// [1] = <?php
// [2] = return returnOrEcho("hi1");
// [3] = ?>
return eval($matches[2]);
}
function evalPhp($file)
{
// Load contents
$contents = file_get_contents($file);
// Add returns
$content_with_returns = str_replace(
"returnOrEcho"
,"return returnOrEcho"
,$contents);
// eval
$modified_content = preg_replace_callback(
array("|(\<\?php)(.*)(\?\>)|"
,"evalCallback"
,$content_with_returns);
return $modified_content;
}
आप आप एक returnOrEcho
समारोह का उपयोग करने के लिए इतना है कि यह इस मामले और सामान्य मामले के लिए अतिभारित किया जा सकता शामिल कर रहे हैं PHP फ़ाइल को संशोधित करने के लिए होगा। इस मामले में आप return
चाहते हैं ताकि इसे eval
द्वारा आपके इच्छित तरीके से उठाया जा सके, लेकिन सामान्य मामला बिना वापसी के echo
पर है।
तो इस मामले के लिए आप निर्धारित करना होगा:
function returnOrEcho($str)
{
return $str;
}
और सामान्य मामले के लिए आप निर्धारित करना होगा:
function returnOrEcho($str)
{
echo $str;
}
अपने शामिल PHP फ़ाइल (या दृश्य फ़ाइल) में आप की तरह कुछ होता है इस:
<?php returnOrEcho("hi1");?>
<?php returnOrEcho("hi3"."oo");?>
<?php returnOrEcho(6*7);?>
मैं preg_replace_callback
इनलाइन कॉलबैक तो वर्किंग मैं एक प्रयोग नहीं मिल सका अलग कार्य, लेकिन इसका एक उदाहरण है कि इसे कैसे करें: preg_replace_callback() - Calback inside current object instance।
स्रोत
2014-10-30 15:23:01
आउटपुट बफरिंग का उपयोग क्यों न करें? – Greg