Yêu cầu Aug 5th, 2019 3:54 a.m. 159 0 3
  • 159 0 3
0

Tìm file đã được backup mới nhất trong thư mục backup sử dụng php như thế nào?

Chia sẻ
  • 159 0 3

Chào các bạn, Mình đang làm chức năng lấy file backup mới nhất trong thư mục backup sử dụng php. Bài toán của mình là: Mình có thư mục: Backup Trong thư mục backup có 7 thư mục con lần lượt là (Mon, Tue, Wed, Thu, Fri, Sat, Sun) Trong 7 thư mục đều có một file backup.dmp. Giờ làm sao để tìm được file backup mới nhất trong 7 thư mục trên. Để hiển thị ngày tháng năm giờ của file đó. Rất mong các bạn giúp đỡ. Thanks,

Aug 5th, 2019 3:56 a.m.

cái backup là tự động theo ngày hay theo gì hả bạn ??

Avatar Tran Anh @mediavn
Aug 5th, 2019 4:03 a.m.

@HuyDQ Không làm backup mà chỉ hiển thị thông tin file backup mới nhất lên thôi.

3 CÂU TRẢ LỜI


Đã trả lời Aug 5th, 2019 4:13 a.m.
+2

Bạn dùng https://www.php.net/manual/en/function.glob.php để lấy tất cả các file backup có đuôi *.dmp ra. Sau đó lần lượt so sánh thời gian lần cuối bị sửa của các file bằng https://www.php.net/manual/en/function.filemtime.php để tìm ra file mới sửa gần nhất.

Chia sẻ
Đã trả lời Aug 5th, 2019 4:08 a.m.
+1

@mediavn thế thì đơn giản nhất bạn có thể lấy thông tin về thời gian update từng folder và so sánh với nhau. Cách lấy thì tương tự như ở đây https://viblo.asia/q/lay-thong-tin-thoi-gian-cua-file-trong-thu-muc-su-dung-laravel-o754DoPW5M6

Chia sẻ
Avatar Tran Anh @mediavn
Aug 5th, 2019 4:09 a.m.

7 cái folder này đều cố định được tạo từ trước mà. Lấy như vậy thì sao chính xác đc bạn. Các file backup hàng ngày sẽ ghi đè vào file cũ. Việc của mình là tìm ra thông tin file mới nhất rồi. Show time của file đó lên ấy.

Aug 5th, 2019 4:26 a.m.

@mediavn như này nhé bạn

<?php

$filePath = 'd:/backup/';
$folderList = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
$result = [];
// Lấy thời gian update gần nhất tất cả các folder
foreach ($folderList as $folderName) {
    if (file_exists($filePath . $folderName)) {
        $result[$folderName] = filemtime($filePath . $folderName);
    }
}
// Lấy thời gian mới nhất
$lastestTime = max(array_values($result));

// Lấy folder mới nhất được update - ứng với file trong đó được cập nhật mới nhất
$folder = array_search($lastestTime, $result);
// Lấy thời gian cập nhật
$formatTime = date("F d Y H:i:s.", $lastestTime);
Avatar Tran Anh @mediavn
Aug 5th, 2019 4:39 a.m.

@HuyDQ Cảm ơn bạn, Mình code mới còn kém quá. Mình cảm ơn các bạn đã giúp đỡ rất nhiều. Diễn đàn thật ý nghĩa.

Aug 5th, 2019 4:40 a.m.

@mediavn không có gì bạn ạ 🤝

Avatar Tran Anh @mediavn
Aug 5th, 2019 7:44 a.m.

Có thể làm cách nào show toàn bộ các file trong thư mục backup và các thư mục con trong nó ra rồi so sánh không bạn? Vì cách này không phù hợp nếu file backup là một file lỗi. error_test.dmp. Thanks

Aug 5th, 2019 7:53 a.m.

@mediavn nghĩa là bạn muốn check chính xác file tên là backup.tmp trong từng folder hả ?

Avatar Tran Anh @mediavn
Aug 5th, 2019 8:15 a.m.
Avatar Tran Anh @mediavn
Aug 5th, 2019 8:20 a.m.

@HuyDQ Mình tìm được đoạn này? nhưng chưa hiểu cái &results sao lại có &

<?php
function getDirContents($dir, $filter = '', &$results = array()) {
    $files = scandir($dir);

    foreach($files as $key => $value){
        $path = realpath($dir.DIRECTORY_SEPARATOR.$value); 

        if(!is_dir($path)) {
            if(empty($filter) || preg_match($filter, $path)) $results[] = $path;
        } elseif($value != "." && $value != "..") {
            getDirContents($path, $filter, $results);
        }
    }

    return $results;
} 

// Simple Call: List all files
var_dump(getDirContents('/xampp/htdocs/WORK'));

// Regex Call: List php files only
var_dump(getDirContents('/xampp/htdocs/WORK', '/\.php$/'));
Aug 5th, 2019 9:02 a.m.

@mediavn cái đó là bạn truyền vào kiểu reference chứ không phải là truyền value nhé. Nôm na là những gì bạn làm với cái mảng truyền vào đó thì nó sẽ ảnh hưởng đến cả các mảng bên ngày bạn truyền vào

Avatar Tran Anh @mediavn
Aug 5th, 2019 9:40 a.m.

@HuyDQ Vậy có cách nào khác trong larval để lấy và so sánh lấy ra file mới nhất không bạn?

Aug 5th, 2019 9:45 a.m.

@mediavn ở trên đó bạn laravel thì nó cũng là PHP thôi mà 😃). Bạn có thể viết code trên thành 1 cái Job và gọi nó trong 1 controller như bình thường

Đã trả lời Aug 5th, 2019 3:57 a.m.
0

Vấn đề bạn gặp có vẻ giống câu hỏi này?!! Bạn thử tham khảo giải pháp trong câu hỏi kia xem nhé! https://viblo.asia/q/lay-thong-tin-thoi-gian-cua-file-trong-thu-muc-su-dung-laravel-o754DoPW5M6

Chia sẻ
Avatar Tran Anh @mediavn
Aug 5th, 2019 4:05 a.m.

Mình đã làm theo hướng dẫn đó rồi. Nhưng link tới thư mục cố định show file thì mình làm hiển thị ok rồi. Giờ làm sao để nó tìm trong đống thư mục kia ra file mới nhất.

Aug 6th, 2019 8:32 a.m.

may quá đang cần...web lỗi backup lại mak kiếm khó qá...cảm ơn bạn 👍

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí