0

我已经开始了一个小项目,试图制作一个在线文本编辑器,它进展顺利,直到系统开始覆盖文件并不必要地添加空格。我有一个名为 editor.php 的文件,其中完成了所有文件的加载、保存和编辑。

所以这是文件的打开/关闭:

<?php
    if(isset($_POST['new'])){
        $filer = substr(md5(microtime()),rand(0,26),6);
        $file_create = $filer.".txt";
        $handle = fopen("files/".$file_create,"w");
        fclose($handle);
        header("Location: editor.php?e=".$filer);
    }

    $file = $_GET['e'];
    $file = basename($file);
    $filename = "files/".$file.".txt";

    $file_get = file_get_contents($filename);

    if(isset($_POST['save'])){
        file_put_contents($filename, $_POST['text']);
    }
?>

在页面的下方,我在<textarea>标签中有这个:

<?php
    echo $file_content;
?>

这使用来自的字符串file_get_contents();

但是当我保存时,什么也没有发生,实际上它删除了文件,当我加载一个文件时,有八个空格,但没有别的。

我知道还有另一种方法可以做到这一点,fopen()如果有人能给我一种使用它的方法,我将不胜感激。

4

2 回答 2

0

您必须验证 $_POST['text'] 中是否确实有内容。

if(isset($_GET['e'])){

    $file = $_GET['e'];
    $file = basename($file);
    $filename = $_SERVER['DOCUMENT_ROOT']."/files/".$file.".txt";
    $file_get = file_get_contents($filename);

    if(isset($_POST['save'])){
       if(!empty($_POST['text']) && isset($_POST['text']))
       {
          $length = strlen($_POST['text']); 
          if($length > 0)
           file_put_contents($filename, trim($_POST['text']));
          else
           die("No content");
       }

    }
}

还要检查文件是否存在及其可写。您可以使用 chmod、mkdir 和 file_exists 函数。

于 2013-10-20T14:04:36.613 回答
0

看看 PHP 的文件模式: http: //php.net/manual/en/function.fopen.php

如果您使用fopen()inw模式打开所有文件,那么您的文件在打开时会被截断。这就是w模式的运作方式。尝试使用a+orc+模式与fopen().

编辑

此外,除非您设置标志,file_put_contents()否则也会覆盖文件内容,例如.FILE_APPENDfile_put_contents($file, $data, FILE_APPEND)

于 2013-10-20T14:05:22.193 回答