2012-09-07 3 views
2

모든 이미지가 포함 된 앨범을 삭제하려고합니다. 저장된 앨범 및 이미지의 경로는 ../_uploads/ < 앨범 이름/< image_file>입니다.이미지가있는 앨범 폴더 삭제

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/난, 그래서 이미지가 데이터베이스에서 삭제되지 않습니다이다 : 여기 내 delete_album.php의 코드는 그리고 폴더와 앨범도 마찬가지이므로 rmdir 함수가 작동하지 않아 이미지가 여전히 존재합니다. 어떤 아이디어가 잘못되었을 수 있습니까?

+0

삭제 하시겠습니까? 폴더에 대한 모든 R/W 권한을 보유하고 있습니까? – Clue

답변

1

루프에서 잘못된 변수 ($image 대신 $image_file)를 사용하고 있습니다. 따라서 아무 것도 삭제되지 않으며 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}"); 
    } 
} 
+0

감사합니다! 이걸 보여주지 않았습니까 지금은 좀 바보 같아요. :-p – Lykos