问一个Loader.php的问题
版本ci 1.7.2Loader.php 673行
这个函数的功能是读取view模板
echo eval('?>'.preg_replace("/;*\s*\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($_ci_path))));
file_get_contents($_ci_path)这个取文件,能理解
str_replace('<?=', '<?php echo ',............这个替换php标签
preg_replace("/;*\s*\?>/", "; ?>", ....................这个也是替换php标签
eval('?>'.................eval我知道,但是前面的'?>'.这个不是很理解,为什么要在前面加上这个东西?
请教高手 eval(code_str ) 的参数不能含有php开始的标记<?或者<?php,所以先添加?>,将?>以后的字符按原样输出 经过我的测试 eval 就是直接在输入的字符串上加上 <?php
所以你如果在 eval 的参数里加上 <?php 就报错了。
但是你如果用 ?> 结束,则后面的原样输出,再加上 <?php 就不会报错了,呵呵 $pageinfo = addslashes(file_get_contents('mk_templates/data_new.htm'));
eval("\$pageinfo = \"$pageinfo\";");
$pageinfo = stripslashes($pageinfo);
create_html($fname.'/asc'.$sort_v, $pageinfo);//order asc我看到别的eval读模板的代码是这样的。
这里ci是在前面加了?>,这个方法我也再去试试。 谢谢ls两位,我测试了下,好像加个?>,就直接输出后面的内容了。
但是如果在?>前面再加东西,有些输出正常,有些输出不正常。比如:
eval('as?>123123123');//报错
eval('ds?>123123123');//ok,输出?>后面的内容 呵呵,这都没在 PHP 手册里说明过,所以了解就好了,不用太深入理解。
如果想深入理解,只能是看 PHP 源码了,呵呵
页:
[1]