Tìm và xóa file thừa trong PHPBB3

Chủ nhật - 18/11/2007 08:51
Bài toán đặt ra: Làm sao xóa các file thừa & bù file thiếu trong hệ thống PHPBB3 mà hiện CSDL của PHPBB3 không thể phát hiện ra? Bạn hãy thử giải pháp này xem sao.
Đây là giải pháp của NEDKA ở vinabb

Ý tưởng là, phải so sánh filename của những file còn trong DB và những file có trong thư mục files/ là sẽ biết được những "file rác" có trong thư mục files/ (có trong files/ mà không có trong DB, nghĩa là không hề được sử dụng đến. Cái này do rất nhiều nguyên nhân mà nó có, ví dụ: thành viên upload file trong khi đang soạn dang dở, rồi bỏ không gửi ; cấp phép sai thư mục files, dẫn đến không thể xóa file trong thư mục vật lí...)

Đầu tiên là tạo danh sách những file có trong DB (đây là tất cả những file đang sử dụng - active). Tạo một file PHP như sau:
Code:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$sql = 'SELECT physical_filename
   FROM ' . ATTACHMENTS_TABLE . '
   WHERE is_orphan = 0
   ORDER BY physical_filename ASC';
$result = $db->sql_query($sql);

while ($row = $db->sql_fetchrow($result))
{
      echo($row['physical_filename'] . '<br />');
}

?>

Upload lên host rồi chạy nó từ trình duyệt, copy tất cả kết quả xuất ra rồi save thành file FILE_DB.txt để trên máy.

Tiếp theo, tạo tiếp file php khác để xuất ra tất cả các file hiện có trong thư mục files/ (mà nhiều cái chắc chắn sẽ không còn trong DB - nghĩa là "file rác"). Mấu chốt là do các file đính kèm của phpBB sau khi upload đã không còn phần mở rộng (click từ trình duyệt nó sẽ hiểu nhầm là thư mục con - do không có đuôi tập tin đi kèm), do đó phải dùng hàm scandir - chỉ có trong PHP5 để hiện tên thực:
Code:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);

$dir    = $phpbb_root_path . 'files/';
$files = scandir($dir);

foreach ($files as $files_list => $file_ary)
{
   printf($file_ary . '<br />');
}

?>

Upload lên host, chạy từ trình duyệt rồi copy kết quả thành file FILE_DIR.txt để trên máy.

Cuối cùng, dùng một phần mềm so sánh văn bản, như WinMerge để so sánh 2 file này, bên trái là file FILE_DB.txt, bên phải là file DB_DIR.txt:

WINMERGE.gif
 
KẾT QUẢ KHI SO SÁNH:
Nếu chỉ có bên phải, không có bên trái: nghĩa là những cái bên phải này là file rác không hề sử dụng tới, hãy lưu lại tên nó rồi dò tìm và xóa đi (xóa từ công cụ quản lý file trong hosting, qua FTP...).
Nếu chỉ có bên trái, không có bên phải: trường hợp này nghĩa là có lỗi, 1 file có trong DB (phần hồn) nhưng lại khộng có trong thư mục files (phần xác), thành ra nếu ai đó click vào link download của nó sẽ báo lỗi "Not found". Hãy tra tìm theo tên đó và upload lại.

Nguồn tin: Nedka@vinabb

Tổng số điểm của bài viết là: 0 trong 0 đánh giá

Click để đánh giá bài viết

Giới thiệu về NukeViet CMS

CMS là gì? CMS là từ viết tắt từ Content Management System. Theo wikipedia Định nghĩa. Hệ quản trị nội dung, cũng được gọi là hệ thống quản lý nội dung hay CMS (từ Content Management System của tiếng Anh) là phần mềm để tổ chức và tạo môi trường cộng tác thuận lợi nhằm mục đích xây dựng một hệ...

Thăm dò ý kiến

Lợi ích của phần mềm nguồn mở là gì?

Thống kê truy cập
  • Đang truy cập59
  • Máy chủ tìm kiếm25
  • Khách viếng thăm34
  • Hôm nay19,085
  • Tháng hiện tại157,415
  • Tổng lượt truy cập114,657,240
Left-column advertisement
  • Thông báo phát hành NukeViet 4.6.00

    NukeViet 4.6.00 là phiên bản tiếp theo của NukeViet CMS dựa trên kế thừa các chức năng của dòng 4.5 và yêu cầu máy chủ hỗ trợ php 7.4 trở lên. Đây cũng là bản cập nhật bảo mật rất quan trọng được khuyến nghị cho toàn bộ người dùng.
  • Thông báo bảo mật dòng NukeViet 4.5.x

    Dòng NukeViet 4.5.x đã bước vào giai đoạn duy trì cuối vòng đời. Trang này ghi nhận liên tục các vấn đề bảo mật và cách chúng tôi xử lý để giữ an toàn cho những website còn ở lại trên dòng 4.5.x đến tháng 7 năm 2027. Chúng tôi vẫn nỗ lực bảo vệ bạn ở mức tốt nhất có thể trên nền tảng này — nhưng nếu có điều kiện, hãy lên kế hoạch chuyển sang phiên bản mới hơn để được bảo vệ tận gốc.
  • Sinh viên ĐH Bách khoa Hà Nội giúp tìm ra lỗ hổng bảo mật của NukeViet

    Nguyễn Quang Bằng, sinh viên năm 4 ngành Khoa học Máy tính tại Đại học Bách Khoa Hà Nội, vừa được nền tảng CMS mã nguồn mở NukeViet vinh danh sau khi phát hiện và báo cáo một lỗ hổng bảo mật nghiêm trọng.
  • Thông báo phát hành NukeViet 4.5.08

    NukeViet 4.5.08 là Phiên bản tiếp theo của dòng NukeViet 4.5, đây là bản cập nhật bảo mật quan trong được đề xuất cho toàn bộ người dùng.
  • Thông tin chính thức về CVE-2025-8772, CVE-2024-36531 và CVE-2024-36528

    Phản hồi chính thức của đội code về các lỗ hổng bảo mật mới của NukeViet CMS được công bố trong năm 2024-2025 và hướng dẫn bảo vệ an toàn cho website của bạn trước các nguy cơ khai thác hoặc tấn công khác.
  • Thông báo phát hành NukeViet 4.5.07

    NukeViet 4.5.07 là Phiên bản tiếp theo của dòng NukeViet 4.5, trọng tâm là xử lý các vấn đề xoay quanh trình soạn thảo CKEditor 5 và tính năng block tùy chỉnh trong giao diện
  • Hướng dẫn tiếp tục sử dụng trình soạn thảo CKEditor 4 trên NukeViet 4.5 các phiên bản từ 4.5.07 về...

    Từ NukeViet 4.5.07 các website cài mới hoặc nâng cấp lên đều được tự động gỡ bỏ CKEditor 4 để đảm bảo tối đa tính bảo mật lâu dài. Nếu bạn có nhiều module hoặc ứng dụng vẫn cần phải dùng nó mà không muốn nâng cấp có thể làm theo hướng dẫn này để tiếp tục sử dụng.
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây