unlink и DELETE FROM не будут работать

Я пытаюсь удалить папку из моего каталога на сервере. Он содержит одно изображение. Файловая система работает примерно так: «www / comics / 0 / page1.jpg», где я хотел бы удалить «0». (www является корневым каталогом, в котором находятся все скрипты сайта PHP). Я также пытаюсь удалить комикс из базы данных. На комикс ссылаются любые страницы, помеченные его comicID, как внешний ключ.

Мой вопрос заключается в том, как получить unlink / DELETE FROM, чтобы на самом деле делать свою работу. В настоящее время сайт не выдает ошибок при запуске и корректно просматривает страницы, но не может ничего удалить. Следует отметить, что я могу удалить отдельные страницы без проблем.

Пара заметок:

  • Комикс без страниц будет удален из базы данных, но его папка останется в файловой системе.
  • Комикс со страницами ничего не делает и остается как в базе данных, так и в файловой системе.
  • Комикс без каталога файлов будет удален из базы данных. (Каталог файлов создается при создании первой страницы).
  • comicsID принимает числовое значение из comicsList, выпадающего списка выбора. Здесь должно быть 0 или около того, идентификатор комикса, выбранного для удаления, и название его папки.

Код:

<?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');
}
?>

0

Решение

Это логика, которую вы должны использовать:

$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()

1

Другие решения

попробуйте дать правильный путь к файлу, как

unlink('comics/'.$setComic); // use path with quote and concat php var to path
0

Строка должна быть исправлена:

unlink(comics/$setComic);

Для того, чтобы:

unlink('comics/'.$setComic);

Также проверьте, есть ли путь к изображению /comics/ верно.

0
По вопросам рекламы [email protected]