来自文件的PHP代码不会执行

时间:2014-05-09 23:15:04

标签: php

我正在为内容管理器开发BB代码系统,我希望能够在我的textarea中使用[code=php]<?php echo "Hello World!"; ?>[/code]之类的东西。使用GeSHi(语法高亮显示)我已经使用以下函数来解析代码:

function parsecode($codetype) {
    $source = file_get_contents("file.php"); 
    $language = $codetype; 
    $geshi = new GeSHi($source, $language); 
    echo '<code class="num">', implode(range(1,count(file("file.php"))), "<br />"), "</code>"; 
    echo $geshi->parse_code();
}

这完全没问题!

现在这是BB代码的用武之地。使用preg_replace我创建了一个简单的系统来查找和替换代码:

$find = array( 
  "/\[code\=(.+?)\](.+?)\[\/code\]/is"
);
$replace = array(
  '<?php parsecode("$1"); ?>'
);

是的,现在这意味着它只读取语言并解析文件“file.php”,但最终我的工作会有所不同,但现在这并不重要。

会发生什么,BB代码是否正确执行,结果是它确实执行了代码,但它不执行函数parsecode()。我进行了一些小调整以找出问题所在,并将其保存到文件中,结果显示该文件包含以下内容:<?php parsecode("php"); ?>。这正是它应该包含的内容。当我在文件中写下这行代码时,它会执行。

在textarea中提交的任何内容都存储在一个文件中,然后使用fopen()读取,然后在另一页上回显。

我的问题:为什么功能不执行&amp;像它应该解析代码?

提前致谢!

1 个答案:

答案 0 :(得分:1)

只有一种方法可以让PHP代码在PHP代码中执行(动态更改代码),并使用eval()。

http://www.php.net/manual/en/function.eval.php

这让你动态制作代码并执行它

请记住这句话: “如果eval()就是答案,你几乎肯定会问错误的问题。 - Rasmus Lerdorf,PHP的BDFL”

eval()以安全漏洞而闻名并被利用。非常不推荐。 但是,只要你没有在eval中使用用户生成的代码就可以了。您可以在其周围进行返回以仅在数据库中获得结果。

你可以通过在脚本中运行它来实现相同的效果,但不能在它在条目中运行之前替换它,而是在论坛页面本身上...