Yêu cầu thg 8 5, 2019 3:54 SA 170 0 3
  • 170 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ẻ
  • 170 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,

thg 8 5, 2019 3:56 SA

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

Avatar Tran Anh @mediavn
thg 8 5, 2019 4:03 SA

@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 thg 8 5, 2019 4:13 SA
+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 thg 8 5, 2019 4:08 SA
+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
thg 8 5, 2019 4:09 SA

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.

thg 8 5, 2019 4:26 SA

@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
thg 8 5, 2019 4:39 SA

@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.

thg 8 5, 2019 4:40 SA

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

Avatar Tran Anh @mediavn
thg 8 5, 2019 7:44 SA

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

thg 8 5, 2019 7:53 SA

@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
thg 8 5, 2019 8:15 SA
Avatar Tran Anh @mediavn
thg 8 5, 2019 8:20 SA

@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$/'));
thg 8 5, 2019 9:02 SA

@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
thg 8 5, 2019 9:40 SA

@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?

thg 8 5, 2019 9:45 SA

@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 thg 8 5, 2019 3:57 SA
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
thg 8 5, 2019 4:05 SA

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.

thg 8 6, 2019 8:32 SA

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í