Я пытаюсь удалить папку из моего каталога на сервере. Он содержит одно изображение. Файловая система работает примерно так: «www / comics / 0 / page1.jpg», где я хотел бы удалить «0». (www является корневым каталогом, в котором находятся все скрипты сайта PHP). Я также пытаюсь удалить комикс из базы данных. На комикс ссылаются любые страницы, помеченные его comicID, как внешний ключ.
Мой вопрос заключается в том, как получить unlink / DELETE FROM, чтобы на самом деле делать свою работу. В настоящее время сайт не выдает ошибок при запуске и корректно просматривает страницы, но не может ничего удалить. Следует отметить, что я могу удалить отдельные страницы без проблем.
Пара заметок:
Код:
<?php
session_start();
if(isset($_POST['btnEdit']))
{
$_SESSION['comicID'] = $_POST['comicsList'];
}
if(isset($_POST['btnDelete']))
{
$_SESSION['comicID'] = $_POST['comicsList'];
$setComic = $_SESSION['comicID'];
include_once('includes/conn.inc.php');
unlink(comics/$setComic);
mysqli_query($conn, "DELETE FROM comic WHERE comicID = '$setComic'");
mysqli_close($conn);
header('Location: myComics.php');
}
?>
Это логика, которую вы должны использовать:
$image = "file.jpg";
$setComic = "0";
unlink("comics/$setComic/$image");
rmdir("comics/$setComic");
Согласно мой комментарий:
«Сначала необходимо удалить все файлы (или выбранные файлы), а затем удалить папку. разъединить не выполняет оба действия. «
RmDir удаляет каталог, но только работает на пустой папки.
разъединить удаляет файл, не удаляет папки.
Вытащил из http://www.paulund.co.uk/php-delete-directory-and-files-in-directory
После удаления всех файлов он может удалить каталог с помощью функции rmdir.
<?php
function delete_directory($dirname) {
if (is_dir($dirname))
$dir_handle = opendir($dirname);
if (!$dir_handle)
return false;
while($file = readdir($dir_handle)) {
if ($file != "." && $file != "..") {
if (!is_dir($dirname."/".$file))
unlink($dirname."/".$file);
else
delete_directory($dirname.'/'.$file);
}
}
closedir($dir_handle);
rmdir($dirname);
return true;
}
?>
Более чистая версия Льюис Коулз
Увидев этот фрагмент PHP, Льюис ушел и улучшил код, сократив его до 9 строк кода. Это замечательно, когда люди берут эти фрагменты и улучшают их, поскольку это помогает всем узнать немного больше о коде.
Вот фрагмент, который Льюис смог придумать.
<?php
/*
* php delete function that deals with directories recursively
*/
function delete_files($target) {
if(is_dir($target)){
$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned
foreach( $files as $file )
{
delete_files( $file );
}
rmdir( $target );
} elseif(is_file($target)) {
unlink( $target );
}
}
?>
Затем для отладки / устранения неполадок:
добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.
так же как or die(mysqli_error($conn))
в mysqli_query()
попробуйте дать правильный путь к файлу, как
unlink('comics/'.$setComic); // use path with quote and concat php var to path
Строка должна быть исправлена:
unlink(comics/$setComic);
Для того, чтобы:
unlink('comics/'.$setComic);
Также проверьте, есть ли путь к изображению /comics/
верно.