【问题标题】:unlink and DELETE FROM won't work取消链接和删除将不起作用
【发布时间】:2014-12-05 04:46:28
【问题描述】:

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

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

几个注意事项:

  • 没有页面的漫画将从数据库中删除,但其文件夹将保留在文件系统中。
  • 带有页面的漫画不执行任何操作,并且保留在数据库和文件系统中。
  • 没有文件目录的漫画将从数据库中删除。 (文件目录在创建第一页时创建)。
  • comicsID 正在从comicsList 中获取一个数字值,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');
}
?>

【问题讨论】:

  • “文件夹”,而不是“文件夹”。对不起。
  • 尝试unlink("comics/$setComic/$the_image"); 然后rmdir("comics/$setComic"); - $the_image 是一个组合变量;您需要将其替换为图像的名称/变量。
  • 更新:$image = "file.jpg"; $setComic = "0"; unlink("comics/$setComic/$image"); rmdir("comics/$setComic"); 对我有用,所以这就是你需要做/使用的。
  • 现在可以工作了吗??

标签: php mysqli unlink


【解决方案1】:

这是你需要使用的逻辑:

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

根据my comment:

“您首先需要删除所有文件(或选定的文件),然后删除文件夹。unlink 不会同时执行这两个操作。”

  • 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 sn-p 之后,Lewis 离开并改进了代码,将代码减少到只有 9 行代码。当人们采用这些 sn-ps 并对其进行改进时,这非常棒,因为它可以帮助每个人更多地了解代码。

这是 Lewis 想出的 sn-p。

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

【讨论】:

    【解决方案2】:

    尝试给出正确的文件路径

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

    【讨论】:

    【解决方案3】:

    该行需要更正:

    unlink(comics/$setComic);
    

    收件人:

    unlink('comics/'.$setComic);
    

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

    【讨论】:

    • /comics/ 是一个文件夹。我正在删除其中的另一个文件夹“0”。
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2023-04-08
    • 2018-02-12
    • 2016-03-20
    • 2016-02-11
    相关资源
    最近更新 更多