PHP如何执行字符串中的某段php代码 ??

未梦 发布于 2017/06/18 14:23
阅读 572
收藏 0
PHP

字符串如下:

这里是字符串的开始文本

{php}
for($i=0;$i<10;$i++){
echo '这是'.$i;
}
{/php}

这里是字符串的结束文本。

 

我想执行{php}{/php}中间的代码。

已经能获取到并且eval执行,但是现在问题是  这段代码执行后就输出了。结果如下:

这是1这是2这是..这是10

这里是字符串的开始文本

这里是字符串的结束文本


我想得到的结果是:

这里是字符串的开始文本

这是1这是2这是..这是10

这里是字符串的结束文本

 

请问怎么实现呢?

加载中
0
未梦
未梦

目前想到的临时解决办法:

在{php}{/php}中不用echo,使用return。

eval('function PhpEval(){'.$phpcode.'}$code = PhpEval();');

然后用$code替换{php}{/php}中间的代码。

请问有不有更加有效的方法?

0
开源中国首席罗纳尔多
未梦
未梦
我知道这个函数,看我的内容。
0
艾恩anlige
先“编译”,再运行。而不是边编译,边运行
未梦
未梦
我想到的先编译就是获取php代码然后放入函数里面,在调用。但是这样一个页面只能有一个函数。
0
梅开源
梅开源

file_put_contents逻辑调整组合后的代码到一个空php文件,然后include进来。

梅开源
梅开源
回复 @未梦 : 做cache和判断文件是否已经存在和定期清理咯,一段文件和include这开销很大吗。
未梦
未梦
如果几百个人同时访问这一个页面都要生成几百个文件然后引入。
0
K不是你的帝
K不是你的帝

这是搞小马么?

未梦
未梦
不是啊,模版中用php代码而已。
0
艾恩anlige
整个内容编译成代码,包括普通非代码文本,最后再eval
0
今世缘1123
今世缘1123

$phpyun->left_delimiter = '{php:}';
$phpyun->right_delimiter= '{/php}';这些要配置好了,才可以的。

{php}
for($i=0;$i<10;$i++){
echo '这是'.$i;
}
{/php}而且这个应该没有空行的

0
习家家天下

$code = 'YOUR CODE FROM SOMEWHERE ELSE';
$code = str_replace(['{php}', '{/php}'], ['<?php', '?>'], $code);

ob_start();
eval('?>'. $code .'<?php ');
$output = ob_get_contents();
ob_end_clean();

echo $output;

 

未梦
未梦
你这个和我的方法差不多,只是多了ob_get_contents();ob_end_clean();,不知道影响性能吗?
0
帝江
帝江

$str = '这里是字符串的开始文本
{php}
for($i=0;$i<10;$i++){
echo "这是" . $i;
}
{/php}
这里是字符串的结束文本.';

//第一个字符串.准备直接输出
$str1 = explode('{php}' , $str);
$str_one = $str1[0];

//第二个字符串.准备直接输出

$str2 = explode('{/php}' , $str1[1]);
$str_two = $str2[1];

//中间php代码.准备执行
$str_php = $str2[0];

//整理成想要的php代码
$php_code = "echo '{$str_one}<br />'; {$str_php} echo '{$str_two}';";

eval($php_code);

返回顶部
顶部