来源:
此处(
source) 是
mfunc
W3TC插件0.9.2.9版本的一部分,其中正则表达式为:
$buffer = preg_replace_callback(\'~<!--\\s*mfunc\\s*\' . W3TC_DYNAMIC_SECURITY . \'(.*)-->(.*)<!--\\s*/mfunc\\s*\' . W3TC_DYNAMIC_SECURITY . \'\\s*-->~Uis\', array(
&$this,
\'_parse_dynamic_mfunc\'
), $buffer);
由此看来,设置应该是
<!-- mfunc W3TC_DYNAMIC_SECURITY code1-->
code2
<!-- /mfunc W3TC_DYNAMIC_SECURITY -->
The
mfunc
回调是
function _parse_dynamic_mfunc($matches) {
$code1 = trim($matches[1]);
$code2 = trim($matches[2]);
$code = ($code1 ? $code1 : $code2);
if ($code) {
$code = trim($code, \';\') . \';\';
ob_start();
$result = eval($code);
$output = ob_get_contents();
ob_end_clean();
// ... cut ...
所以我们可以看到它使用
eval()
在
code2
零件如果
code1
部件未设置。检查PHP手册中的此函数:
http://php.net/manual/en/function.eval.php
上面写着:
代码不能包装在打开和关闭PHP标记中
示例:
因此,我认为这是一个有效的示例
define(\'W3TC_DYNAMIC_SECURITY\', \'E7C5F12EBCDA5F83A41BF33D778ED\' );
看起来像这样(未测试):
这个code1
案例:
<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED
echo "From code1: Here is a random number " . rand(0,1000);
-->
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
或者
code2
案例:
<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
echo "From code2: Here is a random number " . rand(0,1000);
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->