【问题标题】:HOW TO? Sending PHP code from CodeMirror editor via jQuery.ajax:POST and using php: file_put_contents();如何?通过 jQuery.ajax:POST 从 CodeMirror 编辑器发送 PHP 代码并使用 php: file_put_contents();
【发布时间】:2012-03-21 13:00:50
【问题描述】:

我正在创建一个类似http://c9.io 的服务,以便在浏览器上编辑我服务器上的 .php 文件。

我在那里实现了 CodeMirror 编辑器。 编辑器如下:http://codemirror.net/mode/php/index.html

我的问题是我无法通过 jQuery.ajax POST 发送带有 php 代码的数据。

假设我想将以下几行保存到 hello.php:

 <?php 
         require_once("lukujA.php"); 
 ?>

我正在使用以下 js / jquery 代码来保存文件:

$(".save-file").click(function (){
            var content = editor.getValue(); //textarea text
            var path = "hello.php";
        //following line shows content-data as it shows on CodeMirror editor
        //confirm box without any quotes / slashes / and with every linebreak

            var response = confirm("Do you want to save? DATA: " + content);
            if(response)
            {
                $.ajax({
                    type: "GET",
                    url: "saveFile.php",
                    data: "content="+content+"&path="+path+"",
                    success: function(){
                        alert("File saved!"); 
                    }
                });
            }
            else{
                alert("File not saved!");
            }
        });

保存文件.php:

$path = $_GET['path'];
$content = $_GET['content'];

if($path !== "" and is_writable($path))
    file_put_contents($path, $content);

上面的代码输出 hello.php 如下所示(在一行上并带有斜杠)(使用 POST 似乎删除了我在编辑器上所做的任何换行符):

<?php require_once(\"lukujA.php\"); ?>

我不能在 saveFile.php 上使用stripslashes($content);,因为如果我有这样的 php 代码:

<?php echo "<input type=\"text\" name=\"foo\">"; ?>

strip_slashes 将删除那些斜线,代码在执行时将变为无效。

我应该如何遇到这种情况以及如何将新代码保存到文件中? 你会怎么做这样的编辑器?

谢谢

【问题讨论】:

  • 为什么不能通过 AJAX 帖子发送 php 代码?如果是从textarea发送的应该没问题
  • 我认为使用 jquery ajax 或直接 ajax 发送它并不重要。是后期操作本身搞砸了我的输出(我认为)
  • 我在发送格式化代码时从来没有遇到过问题。
  • 我想我应该尝试使用 jquery.cookie 创建 cookie,获取随它一起传递的内容并使用 $_Cookie 在 saveFile.php 上接收它。那天晚上的工作。我应该尝试我醒来的下一件事
  • 祝你好运,无法在 cookie 中存储很多内容,而 ajax 确实有效

标签: php jquery codemirror


【解决方案1】:

通过以下方式完成整个工作:

    $(".save-file").click(function (){
        editor.save();
        var content = editor.getValue(); //textarea text
        var path = $("#hiddenFilePath").text(); //path of the file to save
        var response = confirm("Do you want to save?");
        if(response)
        {
            $.ajax({
                type: "POST",
                url: "saveFile.php",
                data: {c:content,p:path},
                dataType: 'text',
                success: function(){
                    alert("File saved!"); 
                }
            });
        }
        else{
            alert("File not saved!");
        }
    });

查看代码data: {c:content,p:path}, dataType: 'text',

在 saveFile.php 中,我使用 stripslashes($content),因为我似乎在 php 设置上有魔术引号。

当我需要发送像 echo "&lt;br&gt;&lt;a href=\"?p=$p&amp;vko=$vkoPrev\"&gt;Edellinen&lt;/a&gt; &lt;a href=\"?p=$p&amp;vko=$vko\"&gt;Tämä viikko&lt;/a&gt; &lt;a href=\"?p=$p&amp;vko=$vkoNext\"&gt;Seuraava&lt;/a&gt;&lt;br&gt;&lt;br&gt;"; 这样的数据时,stripslashes 仍然会在我的数据引号之前保留这些斜杠,因为当我通过 POST 发送数据时,就像上面看到的 urlEncoding 在我的数据斜杠之前添加斜杠。

很难解释。希望将来有人能从中得到一些东西:) 对不起,英语也不是很好。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多