Удаление файла сервера - PullRequest
10 голосов
/ 10 февраля 2011

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

<ul>
    <li><a href="delete_file.php?file=uploads/file_01.jpg">Delete File 01</a></li>
    <li><a href="delete_file.php?file=uploads/file_02.jpg">Delete File 02</a></li>
    <li><a href="delete_file.php?file=uploads/file_03.jpg">Delete File 03</a></li>
</ul>

Проблема в том, что я не уверен, как заставить работать мой файл delete_file.php. Я считаю, что это должно быть что-то вроде этого:

<?php 
    $path="uploads/file_01.jpg";
    if(unlink($path)) echo "File Deleted"; 
?>

... но я не уверен, как заставить $ path изменить файл, на который я щелкнул, чтобы удалить.

Ответы [ 3 ]

24 голосов
/ 10 февраля 2011

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

определит базовый каталог, который будет содержать любые файлы, которые будут удалены

$base_directory = '/home/myuser/';

Затем удалите файл

if(unlink($base_directory.$_GET['file']))
    echo "File Deleted.";
5 голосов
/ 10 февраля 2011
<?php
  $file_to_delete = $_GET['file'];
  if (is_file($file_to_delete)){
    echo (unlink($file_to_delete) ? "File Deleted" : "Problem deleting file";

  }
?>

Я не собираюсь лгать, не знаю лучшего способа дезинфицировать $ _GET ['file'], кроме проверки, является ли это файл.Если это неверный способ, эксперты, пожалуйста, присоединяйтесь. (Может быть, следуйте инструкциям , представленным в этой теме SO ?)

0 голосов
/ 31 января 2019

Иногда вы можете захотеть создать путь динамически.

Например, я использую CMS в разных местах, поэтому я не должен использовать фиксированные определения.

Структура моего проекта:

-myProject
| -admin
| --app
| --- контроллеры
| -загрузка

$base_directory = dirname(__FILE__);
echo $base_directory; //'/home/myProject/public_html/admin/app/controlers/'

Это путь к запущенному файлу php.

Мой php файл в 'admin/app/controllers/'

Но загрузить файл в 'upload/'

Нам нужно удалить ненужные каталоги для правильного пути. Файл в папке загрузки, поэтому нам не нужно «admin / app / controllers /», не нужен. Итак, мы удаляем эту часть.

$path = str_replace('admin/app/controllers/', '', $path);
echo $path;  //'/home/myProject/public_html/upload/myFile'

Теперь у нас правильный путь, и мы можем удалить файл.

if (file_exists($path)){
    if(unlink($path)){
       echo "File deleted";
    }
}else{
     echo "File is not exists";
}
...