2016-04-17 4 views
-1

Я использую этот код, чтобы показать список файлов в странице профиля пользователя:Удалить файл с помощью PHP

public static function getUserProfilemusic() { 
    $path = Xenforo_Application::getInstance()->getRootDir() . '/styles/default/dadparvar/profilemusic/songs/'; 
    $directoryList = scanDir($path.'/'.func_get_arg(1)); 
    unset($directoryList[0]); 
    unset($directoryList[1]); 
    $string = ''; 
    foreach ($directoryList as &$listEntry) { 
     $songURL = /*$path*/ '/styles/default/dadparvar/profilemusic/songs/' . func_get_arg(1) . '/'. $listEntry; 
     $string .= "<a href='$songURL' class='Tooltip' title='Click to Download $listEntry'> $listEntry </a> 
       | <a href='#' class='Tooltip' title='Click to Remove $listEntry' target='_blank'> X </a> 
       <br> 
       "; 
    } 
    return $string; 
} 

Как я могу установить, когда пользователь нажал на X этот файл будет удален?

Любое мнение будет оценено по достоинству.

+1

Вы должны опубликовать имя файла скрипта, который вы будете удалять файлы с –

ответ

2

Это немного зависит от вашей структуры, но самый простой способ - отправить имя файла на новый скрипт, например deletefile.php, в этом файле вы сначала проверите, если вы вошли в систему. Затем вы можете проверить, существует ли файл и сделать ли он unlink в этом файле.

if(is_file($pathtofile."/".$filename)) { 
    unlink($pathtofile."/".$filename); 
} 

Будьте терпеливы, проверяя входное имя файла, что у вас нет защитного отверстия в приложении. Чтобы предотвратить некоторые проблемы, вы должны использовать полный путь к файлу.

+2

Для безопасности вы можете также проверить, чтобы убедиться, что файл удаляемый был загружен пользователем, удалив его, чтобы пользователи не могли удалять файлы других пользователей – Jeff

1

Вам нужно будет определить путь к файлу, который требуется удалить, и преформ функции PHP с unlink() преформ РНР функции onclick вы можете использовать AJAX

<a href='myAjax()' class='Tooltip' title='Click to Remove $listEntry' target='_blank'> 

function myAjax() { 
     $.ajax({ 
      type: "POST", 
      url: 'ajax.php', 
      data:{action:'call_this'}, 
      success:function(html) { 
      alert(html); 
      } 

     }); 
} 

ajax.php

if($_POST['action'] == 'call_this') { 
    $listEntry = 'file_path' 
    unlink($listEntry); 
    } 
1

Вам нужно сделать 2 вещи, чтобы добиться удаления файла.

  1. Удалить ссылку на файл из базы данных (если сохранено).

  2. Удалить фактический файл с диска.

Примеры функций для этих действий:

<?php 
     public function deleteFromDb() { 
      global $database; 
      $sql = "DELETE FROM <$table_name> WHERE id = <ID> LIMIT 1"; 
      $database->query($sql); 
      return ($database->affected_rows() == 1) ? true : false; 
     } 

     public function destroyFile() { 
     // Remove the database entry 
      if($this->deleteFromDb()) { 
       // Remove the file 
       $target_path = <PATH_TO_FILE_TO_DELETE>; 
       return unlink($target_path) ? true : false; 
      } else { 
       // Failed to delete from db 
       return false; 
      } 
     } 
    ?>