Quét và xoá các tập tin trong thư mục với PHP

Mục đích: code này dùng để quét các file resize từ một file gốc và xoá khỏi thư mục.

Chúng ta thường dùng lệnh scandir() để quét tìm danh sách tập tin (file) trong thư mục nhưng nó chỉ hiệu quả khi áp dụng ở các thư mục có số lượng file nhỏ. Nếu trường hợp số lượng file lớn và nhiều thì ta phải sử dụng bộ lọc cho kết quả nhanh nhất để tăng hiệu năng và giảm tải hao tổn tài nguyên trên website.

Dưới đây là một cách nhỏ để sử dụng cho hiệu quả:

Ví dụ trong thư mục chứa có các file như sau:

1506763973-filename-2017-09-30-at-11_13_39-150x150.png
1506763973-filename-2017-09-30-at-11_13_39.png
1506763973-filename-2017-09-30-at-11_13_39-250x150.png

và nằm trong thư mục path/upload/image, khi đó, nếu dùng scandir() thì ta sẽ có cả 3 file trên trong cùng 1 array().

Tuy nhiên, thay vì sử dụng scandir(), chúng ta có một phương pháp khác hiệu quả hơn đó là sử dụng glob(), với phương thức dùng như sau:

//  Lấy thông tin của file 1506763973-filename-2017-09-30-at-11_13_39.png
$pathinfo = json_decode(json_encode(pathinfo('path/upload/image/1506763973-filename-2017-09-30-at-11_13_39.png')));
//  Tìm các file cùng tên và xoá khỏi thư mục
foreach (glob($pathinfo->dirname . '/' . $pathinfo->filename . '*' . $pathinfo->extension) as $filename)
{
    (file_exists($filename) ? unlink($filename) : FALSE);
}

Giải thích:

  • $pathinfo->dirname: thông tin đường dẫn thư mục
  • $pathinfo->filename: tên của file (không có đuôi định dạng)
  • $pathinfo->extension: định dạng của file (không có dấu .)
  • Với mỗi vòng lặp, hàm glob() sẽ trả về một đường dẫn tuyệt đối đến file mà ta muốn xoá, ở đây sẽ là 3 kết quả: path/upload/image/1506763973-filename-2017-09-30-at-11_13_39.png, path/upload/image/1506763973-filename-2017-09-30-at-11_13_39-150x150.pngpath/upload/image/1506763973-filename-2017-09-30-at-11_13_39-250x150.png

Khi lập lệnh tìm như trên, thì hàm glob() sẽ hiểu là ta đang tìm các file có tên giống với cấu trúc sau: 1506763973-filename-2017-09-30-at-11_13_39*png trong thư mục path/upload/image. Vậy những tập tin nào có 1 phần tên trùng với 1506763973-filename-2017-09-30-at-11_13_39 và có đuôi định dạng là png sẽ được xoá khỏi thư mục.

Ngoài ra chúng ta cũng có thể áp dụng cách này để xoá các file có trong thư mục.

Chúc các bạn thao tác thành công. Nếu có bất kỳ thắc mắc nào, hãy để lại một bình luận, chúng tôi sẽ giải đáp cho bạn ngay khi chúng tôi online.

Chủ đề liên quan
Quét và xoá các tập tin trong thư mục với PHP

Cùng chuyên mục

Xem nhiều hôm nay