mahone 发表于 2010-7-27 16:47:57

问一个Loader.php的问题

版本ci 1.7.2
Loader.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我知道,但是前面的'?>'.这个不是很理解,为什么要在前面加上这个东西?
请教高手

haohailuo 发表于 2010-7-27 18:56:48

eval(code_str ) 的参数不能含有php开始的标记<?或者<?php,所以先添加?>,将?>以后的字符按原样输出

Hex 发表于 2010-7-28 00:28:57

经过我的测试 eval 就是直接在输入的字符串上加上 <?php
所以你如果在 eval 的参数里加上 <?php 就报错了。
但是你如果用 ?> 结束,则后面的原样输出,再加上 <?php 就不会报错了,呵呵

mahone 发表于 2010-7-29 15:09:37

$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是在前面加了?>,这个方法我也再去试试。

mahone 发表于 2010-7-29 15:18:12

谢谢ls两位,我测试了下,好像加个?>,就直接输出后面的内容了。
但是如果在?>前面再加东西,有些输出正常,有些输出不正常。比如:
eval('as?>123123123');//报错
eval('ds?>123123123');//ok,输出?>后面的内容

Hex 发表于 2010-7-29 17:05:47

呵呵,这都没在 PHP 手册里说明过,所以了解就好了,不用太深入理解。
如果想深入理解,只能是看 PHP 源码了,呵呵
页: [1]
查看完整版本: 问一个Loader.php的问题