unlink和DELETE FROM不起作用

时间:2014-12-05 04:46:29

标签: php mysqli unlink

我正在尝试从我的服务器目录中删除一个文件夹。它包含一个图像。文件系统的工作方式类似于:'www / comics / 0 / page1.jpg',其中我想要消除'0'。 (www是所有PHP站点脚本所在的根目录)。我也试图从数据库中删除漫画。漫画被任何标有其comicID作为外键的页面引用。

我的问题是如何取消链接/删除来实际完成他们的工作。目前,该网站在运行时没有出现任何错误,并且正确地遍历页面,但无法删除任何内容。应该注意的是,我可以删除没有问题的单个页面。

几点说明:

  • 没有页面的漫画将从数据库中删除,但其文件夹将保留在文件系统中。
  • 带页面的漫画不会做任何事情,并且仍保留在数据库和文件系统中。
  • 将从数据库中删除没有文件目录的漫画。 (创建第一页时创建文件目录)。
  • comicsID从comicsList获取一个数字值,这是一个选择下拉列表。这里应该是'0'左右,选择删除的漫画的ID和文件夹的名称。

代码:

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

3 个答案:

答案 0 :(得分:1)

这是您需要使用的逻辑:

$image = "file.jpg";
$setComic = "0";
unlink("comics/$setComic/$image");
rmdir("comics/$setComic");

根据my comment:

&#34;您首先需要删除所有文件(或所选文件),然后删除该文件夹。 unlink并未同时执行这两项操作。&#34;

  • rmdir删除了一个目录,但仅在文件夹中

  • unlink删除文件,但不删除文件夹。

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

清洁版作者:Lewis Cowles

在看到这个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 );  
    }
}
?>

然后进行调试/故障排除:

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

以及or die(mysqli_error($conn))mysqli_query()

答案 1 :(得分:0)

尝试提供正确的文件路径,如

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

答案 2 :(得分:0)

需要纠正这条线:

unlink(comics/$setComic);

要:

unlink('comics/'.$setComic);

另外,检查图像/comics/的路径是否正确。