The version of vichan running on lainchan.org
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.8KB

  1. #!/usr/bin/php
  2. <?php
  3. /*
  4. * delete-stray-images.php - there was a period when undoImage() was not working at all. This meant that
  5. * if an error occured while uploading an image, the uploaded images might not have been deleted.
  6. *
  7. * This script iterates through every board and deletes any stray files in src/ or thumb/ that don't
  8. * exist in the database.
  9. *
  10. */
  11. require dirname(__FILE__) . '/inc/cli.php';
  12. $boards = listBoards();
  13. foreach ($boards as $board) {
  14. echo "/{$board['uri']}/... ";
  15. openBoard($board['uri']);
  16. $query = query(sprintf("SELECT `file`, `thumb` FROM ``posts_%s`` WHERE `file` IS NOT NULL", $board['uri']));
  17. $valid_src = array();
  18. $valid_thumb = array();
  19. while ($post = $query->fetch(PDO::FETCH_ASSOC)) {
  20. $valid_src[] = $post['file'];
  21. $valid_thumb[] = $post['thumb'];
  22. }
  23. $files_src = array_map('basename', glob($board['dir'] . $config['dir']['img'] . '*'));
  24. $files_thumb = array_map('basename', glob($board['dir'] . $config['dir']['thumb'] . '*'));
  25. $stray_src = array_diff($files_src, $valid_src);
  26. $stray_thumb = array_diff($files_thumb, $valid_thumb);
  27. $stats = array(
  28. 'deleted' => 0,
  29. 'size' => 0
  30. );
  31. foreach ($stray_src as $src) {
  32. $stats['deleted']++;
  33. $stats['size'] = filesize($board['dir'] . $config['dir']['img'] . $src);
  34. if (!file_unlink($board['dir'] . $config['dir']['img'] . $src)) {
  35. $er = error_get_last();
  36. die("error: " . $er['message'] . "\n");
  37. }
  38. }
  39. foreach ($stray_thumb as $thumb) {
  40. $stats['deleted']++;
  41. $stats['size'] = filesize($board['dir'] . $config['dir']['thumb'] . $thumb);
  42. if (!file_unlink($board['dir'] . $config['dir']['thumb'] . $thumb)) {
  43. $er = error_get_last();
  44. die("error: " . $er['message'] . "\n");
  45. }
  46. }
  47. echo sprintf("deleted %s files (%s)\n", $stats['deleted'], format_bytes($stats['size']));
  48. }