2013-10-20 20 views
0

我已經開始一個試圖製作在線文本編輯器的小型項目,直到系統開始覆蓋文件和不必要地添加空格爲止。我有一個名爲editor.php的文件,所有的文件加載,保存和編輯完成。用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(),如果有人可以給我一個方法來使用它,它將不勝感激。

+1

如果此實驗將要在線託管,請務必清理'$ file'。否則,遠程攻擊者可能會打開甚至編輯服務器上的隨機文件......如果我自己打開PHP腳本並在其中插入一些惡意代碼會怎麼樣? –

回答

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函數。

0

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

如果您正在使用fopen()w模式,那麼你的文件,因爲它們被打開被截斷打開所有文件。這是w模式的工作方式。嘗試使用a+c+模式與fopen()

編輯

此外,file_put_contents()也將覆蓋文件內容,除非你SETT的FILE_APPEND標誌,例如file_put_contents($file, $data, FILE_APPEND)

+0

謝謝,我已經切換到使用fwrite(),似乎工作。我現在也使用c +作爲寫入模式。非常感謝您的幫助! – user2648508