键入php代码到textarea,存储在数据库中,然后执行

时间:2009-12-02 17:22:41

标签: php html content-management-system

任何人都知道如何做这样的事情。

我有一个textarea设置,允许用户编辑页面内容。然后将内容存储在数据库中,并在html模板中通过php在前端检索。类似的东西:

<html>
yada yada...
<?php
echo get_page_contents_by_id($_GET['id']);
?>
yada yada...
</html>

它全部运行在一个.php文件中,以防有人想要调用它。

我想知道的是,因为我通过php从数据库中获取内容,是否有任何方法可以在该内容中检索php代码并仍然可以在不进行任何文件编写的情况下运行它。

6 个答案:

答案 0 :(得分:3)

您可以使用PHP eval()方法执行从数据库返回的PHP代码 - 就像它实际上直接在您的PHP文件中编写一样。

e.g。

<?php
eval("echo('hello world');");
?>

打印:

  

你好世界

答案 1 :(得分:1)

您可以将eval用于此目的。

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

答案 2 :(得分:1)

eval()正如James Goodwin和Gazler所说,实际上是从字符串数据中执行PHP代码的唯一方法。

除了安全后果之外 - 通过访问mySQL数据可能会损害整个网站 - 这种方法会使代码很难调试,因为您必须通过eval跟踪所有错误消息()d代码。

答案 3 :(得分:0)

我试图做同样的事情,但添加了标签和普通的HTML标签。这不行。如果您需要将PHP与PHP一起存储,请考虑更多的XHR解决方案,该解决方案对每个页面的PHP代码都较少依赖。

答案 4 :(得分:0)

考虑另一种选择。真。

无论你做什么安全检查,功能解析等,这仍然是一个非常坏主意。

一个稍微不那么糟糕的想法,为什么不查看模板解决方案,例如http://www.smarty.nethttp://www.google.com/search?q=php+template+engine

答案 5 :(得分:0)

以下是在textarea中执行代码的代码。

    <?php 
if($_POST){
    print_r($_POST);
    extract($_POST);
    $file = rand(1000,10000);  // creating file with random number
    file_put_contents($file.'.php', '<?php '.$code.' ?>');
    ob_start();
    include $file.'.php';
    echo ob_get_clean();
    unlink($file.'.php');   // deleting the created file after execution.
    die('test');
}
?>
<textarea id="testcode" ></textarea>
    <input type="submit" onClick="return changePermissions1()" />
    <script>
    function changePermissions1(){
        var code = {};
        code['code'] = $("#testcode").val();
        var pass_url = "executefile.php"; // there you can pass the code
        $.ajax({
            type        : "POST",
            beforeSend  : loadingStarts,
            url         : pass_url,
            data        : code,
            success     : function(responseText){`enter code here`
                loadingEnds();
                alert(responseText);
            }
        });
    }
    </script>