从textarea中编辑PHP代码

时间:2014-04-02 12:46:34

标签: php jquery

我目前正在开发自定义CMS,我希望管理员能够在公共区域编辑php文件和样式表。我没有问题到文件,并根据我的调查结果尝试了几个想法,因为谷歌和我对这个网站的搜索有点彻底。这是我到目前为止的地方:

获取文件:

 <?php
    $dir = "./";
    function get_files($directory = "") {
    $dir = $directory;
    if(is_dir($dir)) {
            $dir_array = scandir($dir);
        $filtered = array();
        foreach($dir_array as $file) :
        if(stripos($file, '.') > 0)
                array_push($filtered, $file);
        endforeach;
        return $filtered;
    } else {
        //Do something else
           }
    }

使用jQuery输出textarea中每个文件的内容:

$(document).ready(function() {
    $('.file').each(function(){
    var file_link = this;
    var HTML_FILE_URL = './' + file_link.id;
    var file_id = file_link.id;
    $(file_link).bind('click', function(){
        $('#filename').text(" - " + file_id);
    $.get(HTML_FILE_URL, function(data){
                var htmlData = htmlEntities(data);
        $('textarea').text(htmlData);
        });
    });
    });
});


function htmlEntities(str) {
    //This is a function which I found on this site.
    //It gave me a good result on the html part
    //However, the PHP codes were already executed. 
}

如果有人能指出我正确的方向,我将非常感激。有什么特别的PHP方法我完全忽略了吗?有没有我可以参考的解决方案?

感谢。

1 个答案:

答案 0 :(得分:1)

你不能通过javascript直接从php文件加载源代码 - 因为你发现php总是被执行。

您需要做的是调用将加载并返回源代码的PHP脚本:

//getsource.php
$editable_files = array('edit1.php', 'mybooks.php');

if(isset($_GET['file']) && in_array($_GET['file'], $editable_files)){
    echo file_get_contents($_GET['file']);
}

然后你会在你的js中调用这个文件。

正如其他人所提到的,这可能会打开一些安全漏洞,但这超出了这个问题的范围