取消链接代码以从服务器中删除文件的位置


Where to place the unlink code to delete a file from the server

我在下面有一个javascript函数,当用户单击"删除"按钮时,它会从.listImage中删除附加的文件名:

function stopImageUpload(success, imagefilename){
      var result = '';
      if (success == 1){
         result = '<span class="msg">The file was uploaded successfully!</span><br/><br/>';      
         $('.listImage').eq(window.lastUploadImageIndex).append('<div>' + htmlEncode(imagefilename) + '<button type="button" class="deletefileimage">Delete</button><br/><hr/></div>'); 
      }
      else {
         result = '<span class="emsg">There was an error during file upload!</span><br/><br/>';
      }

      $(".deletefileimage").on("click", function(event) {
        $(this).parent().remove();
    });
      return true;   
}

如您所见,$(".deletefileimage").on("click", function(event) {用于删除正确的附加文件名。

但是我想做的是,当用户删除文件名时,它也从服务器中删除该文件。所以我正在尝试使用此代码:unlink($_FILES["fileImage"]["temp_name"]);从服务器中删除文件。

但我想知道的是,我在哪里存储此代码,以便它使用 javascript 函数删除附加的文件名,然后能够进入 php 脚本从服务器中删除文件?

下面是上传文件的 php 脚本(imageupload.php):

<?php
session_start();
$result = 0;
if( file_exists("ImageFiles/".$_FILES['fileImage']['name'])) {
    $parts = explode(".",$_FILES['fileImage']['name']);
    $ext = array_pop($parts);
    $base = implode(".",$parts);
    $n = 2;
    while( file_exists("ImageFiles2/".$base."_".$n.".".$ext)) $n++;
    $_FILES['fileImage']['name'] = $base."_".$n.".".$ext;
    move_uploaded_file($_FILES["fileImage"]["tmp_name"],
    "ImageFiles2/" . $_FILES["fileImage"]["name"]);
    $result = 1;
}
    else
      {
      move_uploaded_file($_FILES["fileImage"]["tmp_name"],
      "ImageFiles2/" . $_FILES["fileImage"]["name"]);
      $result = 1;
      }
?>
  <script language="javascript" type="text/javascript">window.top.stopImageUpload(<?php echo $result ? 'true' : 'false'; ?>, '<?php echo $_FILES['fileImage']['name'] ?>');</script>

您需要对 php 脚本使用ajax调用以允许删除服务器上的文件。JQuery 的ajax文档可以在这里找到。

首先,您需要像这样连接按钮和图像文件名

$('.listImage').eq(window.lastUploadImageIndex).append('<div>' + htmlEncode(imagefilename) + '<button type="button" class="deletefileimage" image_file_name="' + imagefilename + '">Delete</button><br/><hr/></div>');

现在,您的删除方法将如下所示。

$(".deletefileimage").on("click", function(event) {
    // Find the image file name that is associated with this delete button. You 
    // may want to think about linking the image file name and the delete button
    // in a better way than this.
    var image_file_name = $(this).attr('image_file_name');
    $(this).parent().remove();
    console.log("Deleting " + image_file_name);
    jQuery.ajax("delete.php?imagefilename=" + image_file_name)
      .done(function(data) {
        $(".msg").append(data);
       });
});

最后,delete.php需要看起来像这样

<?php
  $image_file_name = "ImageFiles/" . $_GET["imagefilename"];
  if (User Uploaded this File || Has Permission to Delete it)
  {
    print "Deleting $image_file_name";
    // This assumes delete.php is in the same directory as the image file.
    unlink($image_file_name);
  }
?>

这是一个JSFiddle,向您展示工作代码。

最好将

上传的文件存储在公共临时目录中,然后仅在保存内容时才移动。

另一种方法是列出所有时间上传的文件,并标记"活动/非活动",并定期运行删除旧文件(非活动文件和数小时或数天前创建的脚本)。在这种情况下,当您添加文件或删除内容时,您将它标记为"非活动",当您保存内容时,您将使用的文件标记为"活动"。