/home/xoa-tap-tin-cu-hon-x-ngay-trong-php

Xóa tập tin cũ hơn x ngày trong PHP

Published on

Có thể bạn gặp phải những tình huống muốn xóa các tập tin cũ hơn "x" ngày, nhưng xóa thủ công bằng cách kiểm tra ngày tháng và thời gian là không thể.
Tôi cũng đã từng gặp phải trường hợp như thế :)
Nhưng với một chút hiểu biết về PHP, bạn có thể dễ dàng giải quyết vấn đề này. Không chỉ trên máy chủ, mà với bộ cài php trên máy tính, bạn hoàn toàn có thể dọn dẹp máy tính của bạn với PHP CLI :)

Xóa tập tin cũ hơn

Đầu tiên, tôi sẽ viết đoạn mã hoàn chỉnh, sau đó sẽ tách nhỏ và trình bày :)

<?php
$days = 2;
$dir = dirname ( __FILE__ );

$count = 0;

if ($handle = opendir($dir)) {
    while (( $file = readdir($handle)) !== false ) {
        if ( $file == ‘.’ || $file == ‘..’ || is_dir($dir.’/’.$file) ) {
            continue;
        }

        if ((time() – filemtime($dir.’/’.$file)) > ($days *86400)) {
            $count++;
            unlink($dir.’/’.$file);
        }
    }
    closedir($handle);
    echo "Tổng số tập tin đã xóa: $count \n";
}

Bây giờ dán đoạn code này vào notepad hoặc notepad++ rồi lưu lại với phần mở rộng là .php
Sau đó tải lên chỗ bạn muốn xóa các tập tin cũ.
Bạn có thể thấy phần đầu của code có dòng

$days = 1;

Nó sẽ đặt số ngày mà tập tin sẽ xóa. Ví dụ, nếu bạn đặt là 2, thì những tập tin có thời gian cũ hơn 2 ngày sẽ bị xóa.

Về cơ bản, khi bạn chạy đoạn mã này. Nó sẽ lấy thư mục hiện hành, đọc các tập tin, bỏ qua '.' (thư mục hiện hành) và tiếp tục kiểm tra nếu có các thư mục khác.

if ( $file == ‘.’ || $file == ‘..’ || is_dir($dir.’/’.$file) ) {
    continue;
}

Nếu $file (đang quét) không phải là 1 thư mục thì sẽ lấy thời gian sửa đổi tập tin (thời gian sửa đổi cuối cùng - last modified time) và so sánh với thời gian hiện tại để ra khoảng thời gian.
Tiếp tục so sánh với số ngày cũ hơn bạn đã cài đặt ở biến $days.

if ((time() – filemtime($dir.’/’.$file)) > ($days *86400)) {
    $nofiles++;
    unlink($dir.’/’.$file);
}

Nếu câu lệnh if đúng (tập tin cũ hơn $days ngày) thì sẽ xóa tập tin với sự hỗ trợ của hàm unlink.
Sau khi hoàn tất, đóng thư mục và thoát.

Cuối cùng, tôi có thêm đoạn hiển thị bao nhiêu tập tin đã bị xóa, nhằm thống kê trực quan, bạn hoàn toàn có thể xóa đi :).

Nếu bạn muốn xóa những tập tin như logs, auto backup database. Và muốn tự động hơn nữa thì có thể sử dụng cronjobs trong linux và schedule trong windows.
Cái này tôi sẽ không nói thêm ở đây :)