2013-05-10 76 views
0

我無法弄清楚如何在textarea中打開文件的內容然後編輯文件。老實說,沒有一個具體的問題。我一直在努力工作幾天,結果幾乎爲零。在這一點上,我已經沒有想法,需要一雙新的眼睛。因此,朋友們,一起來看看,並告訴我,如果你看到我的代碼可能明顯的錯誤:PHP文件編輯

這些文件的功能

function view_files($dir) 
{?> 
    <table> 
     <tr> 
      <form method='POST' action='?act=file&dir=<?php echo base64_encode($dir);?>'> 
      <td><input type='text' name='dir' size='50' value='<?php echo $dir; ?>'> 
      <input type='submit' value='Go'></form></td 
     </tr> 

     <table border='1'><tr> 
      <td width='175'><b>Name</b></td> 
      <td><b>Size</b></td> 
      <td><b>Permissions</b></td> 
      <td><b>Edit</b></td> 
      <td><b>Delete</b></td> 
      <td><b>Chmod</b></td> 
     </tr> 
<?php 

    if($handle = opendir($dir)) 
    { 
     while(($file = readdir($handle)) !== false) 
     { 
      if($file != '.' && $file != '..') 
      {?> 
       <table><td> 
        <?php echo $file; ?> 
        <td width='165'><a href='?act=edit&file=<?php echo base64_encode($file);?>'><b id='me'><u>Edit</u></b></a></td> 
        <td width='225'><a href='?act=del'><b id='me'><u>Delete</u></b></a></td> 
        <td width='190'><a href='?act=chmod'><b id='me'><u>Chmod</u></b></a></td> 
       </td></table> 
      <?php 
      } 
     } 
    } 
} 

function edit_files($file) 
{ 
    if(isset($_POST['f']) && isset($_POST['d'])) 
    { 
     $handle = fopen($_POST['f'], 'w'); 
     if(!$handle) 
     { 
      echo 'Failed to open selected file.'; 
     } 
     else 
     {?> 
      <form method='POST' action='?act=edit&file=<?php echo base64_encode($file);?>'><textarea rows='17' cols='70' name='d'><?php 
      $data = htmlspecialchars(file_get_contents($_GET['edit'])); 
      echo $data; 
      fwrite($handle, $_POST['d']); 
     } 
     if(file_exists($file)) 
     { 
      $handle = fopen($file, 'r'); 
      $contents = fread($handle, filesize($file)); 
      echo htmlspecialchars($contents); 
     }?> 
     </textarea><input type='submit' value='Save Changes' /></form><?php 
    } 
} 

這是它開始的地方:

<?php 
if(isset($action) && !empty($action)) 
{ 
    if($action == 'file') 
    {?> 
     <table border='1'><th><b><a id='info' href='?act=file'>[ File Management ]</a></b></th></table><?php 

     view_files($dir); 
    } 
    elseif($action == 'edit') 
    {?> 
     <table border='1'><th><b>[ Edit Files ]</b></th></table><?php 

     edit_files($file); 
    } 

由way $ action == $ _GET ['act']就這樣你知道。我認爲這是所有相關的代碼。基本上發生的是,當我點擊腳本中的編輯按鈕時,它只發布[Edit Files]表頭,就是這樣。所以.. Idk我一直在爲此工作幾天而沒有結果。

回答

0

我修改了你的代碼來作一個工作的例子。如果我只是在它寫入的目錄中運行它,它就可以工作。

過程是這樣:

  1. 選擇目錄,
  2. 選擇文件
  3. 形式
  4. 保存文件

  • 編輯文件的文本,沒有權限的顯示儘管如此,所以你應該將其添加到選擇表中,並確保你的web用戶(我的例子中的apache)具有對文件的寫入權限。

    你原來的代碼真的很混亂。你試圖將許多東西合併成一個動作,並且以相同的形式混合使用POST和GET變量。我建議您進一步細化,以便通過刪除編輯表單中的URL發送的部分來使用所有POST變量。

    <?php 
    
    $dir = isset($_POST['dir'])? $_POST['dir'] : null; 
    $file_to_edit = isset($_GET['file'])? base64_decode($_GET['file']) : null; 
    
    ?> 
        <table> 
         <tr> 
          <form method='POST' action='?act=file&dir=<?php echo base64_encode($dir);?>'> 
          <td><input type='text' name='dir' size='50' value='<?php echo $dir; ?>'> 
          <input type='submit' value='Go'></form></td 
         </tr> 
    
         <table border='1'><tr> 
          <td width='175'><b>Name</b></td> 
          <td><b>Size</b></td> 
          <td><b>Permissions</b></td> 
          <td><b>Edit</b></td> 
          <td><b>Delete</b></td> 
          <td><b>Chmod</b></td> 
         </tr> 
    <?php 
    if(!empty($dir)) 
        view_files($dir); 
    
    function view_files($dir) 
    { 
        if($handle = opendir($dir)) 
        { 
         while(($file = readdir($handle)) !== false) 
         { 
          if($file != '.' && $file != '..') 
          { 
          $path_and_file = $dir . $file; 
          $encoded_path_and_file = base64_encode($path_and_file); 
          ?> 
           <tr> 
            <td><?php echo $file; ?></td> 
            <td><?php echo filesize($path_and_file);?></td> 
            <td>perms</td> 
            <td width='165'><a href='?act=edit&file=<?php echo $encoded_path_and_file; ?>'><b id='me'><u>Edit</u></b></a></td> 
            <td width='225'><a href='?act=del'><b id='me'><u>Delete</u></b></a></td> 
            <td width='190'><a href='?act=chmod'><b id='me'><u>Chmod</u></b></a></td> 
           </tr> 
          <?php 
          } 
         } 
        } 
    } 
    
    if(!empty($file_to_edit)){ 
        echo "Editing: $file_to_edit<br>"; 
        edit_files($file_to_edit); 
    } 
    
    function edit_files($file_to_edit) 
    { 
        if(file_exists($file_to_edit)) 
        { 
         $handle = fopen($file_to_edit, 'r'); 
         $contents = fread($handle, filesize($file_to_edit)); 
         $data = htmlspecialchars($contents); 
         $encoded_path_and_file = base64_encode($file_to_edit); 
        ?> 
        <form method='POST' 
          action='?f=<?php echo $encoded_path_and_file;?>'> 
        <textarea rows='17' cols='70' name='d'><?php echo $data; ?></textarea><br> 
        <input type='submit' value='Save Changes' /> 
        </form> 
        <?php 
        } 
        else { 
         echo "File does not exist.<br>"; 
        } 
    
    } 
    
    if(isset($_GET['f']) && isset($_POST['d'])) 
        save_file(); 
    
    function save_file(){ 
        $file_to_overwrite = base64_decode($_GET['f']); 
        $handle = fopen($file_to_overwrite, 'w'); 
        if(!$handle) 
        { 
         echo 'Failed to open selected file.'; 
        } 
        else 
        { 
         fwrite($handle, $_POST['d']); 
         echo "Wrote d to f"; 
        } 
    }