2

すべての画像を含むアルバムを削除しようとしています。保存されているアルバムと画像へのパスは、この../_uploads/< アルバム名 >/< 画像ファイル >です。私のdelete_album.phpのコードは次のとおりです。

    if(isset($_GET['album_id']) === true){
    $album_id = (int)$_GET['album_id'];
    $query_album_info = "SELECT `albums`.`album_id`, `albums`.`album_name`, `images`.`image_name`, `images`.`image_ext`
                        FROM `albums`
                        LEFT JOIN `images` ON `albums`.`album_id` = `images`.`album_id`
                        WHERE `albums`.`album_id` = {$album_id}
                        LIMIT 1 ";
    $album_info = mysql_query($query_album_info, $connection) or die(mysql_error());
    $row_album = mysql_fetch_assoc($album_info);

    $album = $row_album['album_name'];
    $img_file = $row_album['image_name'] . '.' . $row_album['image_ext'];

    $images = scandir("../_uploads/{$album}/");
    unset($images[0]);
    unset($images[1]);
    //echo "<pre>",print_r($images,true),"</pre>";

    foreach($images as $image){
        unlink("../_uploads/{$album}/{$image_file}");
    }
    if(rmdir("../_uploads/{$album}") === true){
        //delete all images of album from database
        $query_delete_images = "DELETE FROM `images` WHERE `album_id` = {$album_id}";
        $delete_images = mysql_query($query_delete_images) or die(mysql_error());
        if(mysql_affected_rows() == 1){         
        }else{
            redirect_to("albums.php?del_imgs=1");
        }
        //delete album from database
        $query_delete_album= "DELETE FROM `albums` WHERE `album_id` = {$album_id}";
        $delete_album= mysql_query($query_delete_album) or die(mysql_error());
        if(mysql_affected_rows() == 1){ 
            redirect_to("albums.php?delete_album=1");
        }else{
            redirect_to("albums.php?delete_error_album=1");
        }
    }else{
        redirect_to("albums.php?rmdir_error=1");
    }

}else{
    redirect_to("albums.php");
}

Albums.php へのリダイレクトから得られるエラー メッセージは [i]rmdir_error=1[/i] であるため、データベース、フォルダー、およびアルバムからも画像が削除されないため、rmdir 関数は機能しません。原因画像がまだ存在します。何が間違っている可能性がありますか?

4

1 に答える 1

1

ループで間違った変数を使用しています ($image_fileの代わりに$image)。したがって、何も削除されず、 を呼び出そうとするとrmdir()、ディレクトリは空ではありません。

// Use the correct variable in the loop statement: changed $image to $image_file
foreach($images as $image_file) {
    // Don't attempt to remove the current directory or parent
    // Since scandir() will return those too...
    if ($image_file !== "." && $image_file !== "..") {
      unlink("../_uploads/{$album}/{$image_file}");
    }
}
于 2012-09-07T12:52:32.687 に答える