ecshop2.3.7如何运行PHP语句?如何修改fetch_str($source)函数?

2016-07-07 15:12 来源:www.chinab4c.com 作者:ecshop专家

如题ecshop2.3.7如何运行PHP语句?如何修改fetch_str($source)函数?
  1. function fetch_str($source)
  2. {
  3. if (!defined('ECS_ADMIN'))
  4. {
  5. $source = $this->smarty_prefilter_preCompile($source);
  6. }

  7. if(preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $source, $sp_match))
  8. {
  9. $sp_match[1] = array_unique($sp_match[1]);
  10. for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
  11. {
  12. $source = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$source);
  13. }
  14. for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
  15. {
  16. $source= str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '<?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?>'."\n", $source);
  17. }
  18. }
  19. return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
  20. }
复制代码

回答:
直接在使用的文件里面引用就可以

现在人表达真不严谨,哪里有 ECSHOP 2.3.7 , 应该是 ECSHOP 2.7.3

还有一些人的回答也是很不严谨,都没看清楼主问的啥就回答,

楼主你这个问题,只要删掉

  1. if(preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $source, $sp_match))
  2. {
  3. $sp_match[1] = array_unique($sp_match[1]);
  4. for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
  5. {
  6. $source = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$source);
  7. }
  8. for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
  9. {
  10. $source= str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '<?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?>'."\n", $source);
  11. }
  12. }
复制代码


这部分代码就行了

给答案好快啊

学习了,今天没白来哦!

这个你去问你的大学老师

有点复杂啊~~

学习了~~~~

这个你去问你的大学老师

function fetch_str($source)
{
if (!defined('ECS_ADMIN'))
{
$source = $this->smarty_prefilter_preCompile($source);
}
$source = preg_replace("/<\?[^><]+\?>|<\%[^><]+\%>|<script[^>]+language[^>]*=[^>]*php[^>]*>[^><]*<\/script\s*>/iU", "", $source);
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
}

换成这个就行了!不要直接删
其实这样写也不安全,会有漏洞,像你原本那样是最好的。

不断学习中