Чтобы создать кнопку удаления для каждого файла, что вам нужно получить идентификатор и путь к файлу, предполагая, что вы сохранили эту информацию в db при создании функциональности загрузки. Таким образом, пример может выглядеть следующим образом:
<?php
//...
$db = new PDO('mysql:host=127.0.0.1;dbname=db_name','db_user','db_pass');
$stmt = $db->prepare('SELECT id,filename FROM your_table');
while ($row = $stmt->fetch()){
?>
<a href="delete.php?id=<?php echo $row['id']; ?>">Delete</a>
<?php
}
?>
Затем в delete.php
файле:
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
//db connect here
$stmt = $db->prepare('DELETE FROM table_name WHERE id=?');
$stmt->execute([$_GET['id']);
}
Что касается безопасности, то я не могу сказать вам много о, как я не знаю точно, что вы хотите. Но вы можете проверить тип mime (и разрешить только те типы mime, которые вы хотите), и о размерах файлов (чтобы разрешить только определенные размеры файлов или запретить файлы размером 0). Просто найдите google, есть много хороших уроков по этой теме.
И для перечисления всех загруженных файлов для каждого пользователя вы также можете использовать db.
LE
Хорошо, я вырыл немного о вашей проблеме, и я, наконец, нашел способ, чтобы позволить пользователям удалять файлы. Но имейте в виду, что я не учитывал никакой безопасности. Это ваша ответственность, хотя у вас тоже есть этот вопрос.
Так что код выглядит следующим образом:
//index.php
$files = scandir('files');
foreach ($files as $file){
if (is_file('files/'.$file)){
?>
<a href="index.php?remove=<?php echo $file; ?>">delete</a> <br>
<?php
}
}
if(isset($_GET['remove'])){
unlink('files/'.$_GET['remove']) ? header('Location: index.php') : print 'Not Removed<br>';
}
Я использовал chmod 777 -R files/
, прежде чем пытаться код. Я действительно не знаю, хороший ли это подход.
LE2
Структура каталогов Я использовал для этого примера:
project/
files/
1.php
2.html
3.css
4.js
index.php
Эти файлы (1.php
, 2.html
и т.д.) размещены там вашей функциональности загрузки, вы сказали у тебя уже есть. index.php
будет, прежде всего, считать, что files/
каталог как массив (содержащий только имена файлов); затем будет проходить через массив и проверять, является ли каждый элемент массива файлом, а если он есть, то он будет генерировать ссылку и перенаправлять пользователя обратно на index.php
, но на этот раз имеет строку запроса (например: index.php?remove=1.php
). Затем последний вопрос проверки, если есть строка запроса с именем remove
, и если она есть, она удалит соответствующий файл и перенаправит обратно на index.php
.
Привет, Dan, у меня уже есть полный путь к файлу в '$ fullpath'. Я не использую db для файлов, поэтому я считаю, что «unlink()» - это способ пойти с этим. У меня есть аналогичная настройка, которую я использую дома в своей интрасети, и которая использует предварительно построенную систему с db для обработки всех логинов/файлов и прекрасно работает, однако в этом случае не подходит, поскольку сайт, над которым я работаю ограничивается одним db и уже используется. Я знаю, что это можно сделать без db, но я читал каждый результат на первых 5 страницах Google, и ни одна из них не помогает в этом обстоятельстве. – noozl
@noozl Взгляните на мою LE. –
Я все еще не могу реализовать это с помощью моего текущего кода. Я не так хорош в PHP, поэтому немного борюсь с этим. Любые указатели на то, где разместить что? – noozl