Hướng dẫn php get last file in directory - php lấy tệp cuối cùng trong thư mục

Vì vậy, tôi có ứng dụng này xử lý các tệp CSV. Tôi có một dòng mã để tải tệp.

$myFile = "data/FrontlineSMS_Message_Export_20120721.csv";  //The name of the CSV file
$fh = fopen($myFile, 'r');                             //Open the file

Tôi muốn tìm một cách mà tôi có thể nhìn vào thư mục data và nhận tệp mới nhất (tất cả chúng đều có thẻ ngày để chúng theo thứ tự bên trong data) và đặt tên bằng $myFile.

Tôi thực sự không thể tìm thấy và hiểu tài liệu của các thư mục PHP nên bất kỳ tài nguyên hữu ích nào cũng sẽ được đánh giá cao. Cảm ơn bạn.

hỏi ngày 22 tháng 7 năm 2012 lúc 2:39Jul 22, 2012 at 2:39

Hướng dẫn php get last file in directory - php lấy tệp cuối cùng trong thư mục

1

Dưới đây là một nỗ lực sử dụng scandir, giả sử các tệp duy nhất trong thư mục có tên tệp thời gian:assuming the only files in the directory have timestamped filenames:

$files = scandir('data', SCANDIR_SORT_DESCENDING);
$newest_file = $files[0];

Trước tiên, chúng tôi liệt kê tất cả các tệp trong thư mục theo thứ tự giảm dần, sau đó, bất kỳ tên nào là đầu tiên trong danh sách đó có tên tệp "lớn nhất" - và do đó là giá trị dấu thời gian lớn nhất - và do đó là mới nhất.

Lưu ý rằng scandir đã được thêm vào Php 5, nhưng trang tài liệu của nó cho thấy cách thực hiện hành vi đó trong Php 4.

Paulh

2.8322 Huy hiệu vàng14 Huy hiệu bạc31 Huy hiệu đồng2 gold badges14 silver badges31 bronze badges

Đã trả lời ngày 22 tháng 7 năm 2012 lúc 2:56Jul 22, 2012 at 2:56

MatchumatchuMatchu

81.9K17 Huy hiệu vàng151 Huy hiệu bạc160 Huy hiệu đồng17 gold badges151 silver badges160 bronze badges

10

Để tìm kiếm với ký tự đại diện, bạn có thể sử dụng:

 $latest_ctime)
        {
                $latest_ctime = filectime($file);
                $latest_filename = $file;
        }
}
return $latest_filename;
?>

Đã trả lời ngày 20 tháng 1 năm 2021 lúc 15:07Jan 20, 2021 at 15:07

Hướng dẫn php get last file in directory - php lấy tệp cuối cùng trong thư mục

1

Giải pháp của tôi, Giải pháp cải tiến từ Max Hofmann:

$ret = [];
$dir = Yii::getAlias("@app") . "/web/uploads/problem-letters/{$this->id}"; // set directory in question

if(is_dir($dir)) {
   $ret = array_diff(scandir($dir), array(".", "..")); // get all files in dir as array and remove . and .. from it
}

usort($ret, function ($a, $b) use ($dir) {
    if(filectime($dir . "/" . $a) < filectime($dir . "/" . $b)) {
         return -1;
    } else if(filectime($dir . "/" . $a) == filectime($dir . "/" . $b)) {
         return 0;
    } else {
         return 1;
    }
}); // sort array by file creation time, older first

echo $ret[count($ret)-1]; // filename of last created file

Đã trả lời ngày 22 tháng 6 năm 2021 lúc 18:09Jun 22, 2021 at 18:09

Đây là một ví dụ mà tôi cảm thấy tự tin hơn khi sử dụng trình xác thực của riêng mình thay vì chỉ dựa vào dấu thời gian với scandir ().

Trong bối cảnh này, tôi muốn kiểm tra xem máy chủ của tôi có phiên bản tệp gần đây hơn phiên bản của máy khách không. Vì vậy, tôi so sánh các số phiên bản từ tên tệp.

$clientAppVersion = "1.0.5";
$latestVersionFileName = "";

$directory = "../../download/updates/darwin/"
$arrayOfFiles = scandir($directory);
foreach ($arrayOfFiles as $file) {
    if (is_file($directory . $file)) {
        // Your custom code here... For example:
        $serverFileVersion = getVersionNumberFromFileName($file);
        if (isVersionNumberGreater($serverFileVersion, $clientAppVersion)) {
            $latestVersionFileName = $file;
        }
    }
}


// function declarations in my php file (used in the forEach loop)
function getVersionNumberFromFileName($fileName) {
    // extract the version number with regEx replacement
    return preg_replace("/Finance D - Tenue de livres-darwin-(x64|arm64)-|\.zip/", "", $fileName);
}

function removeAllNonDigits($semanticVersionString) {
    // use regex replacement to keep only numeric values in the semantic version string
    return preg_replace("/\D+/", "", $semanticVersionString);
}

function isVersionNumberGreater($serverFileVersion, $clientFileVersion): bool {
    // receives two semantic versions (1.0.4) and compares their numeric value (104)
    // true when server version is greater than client version (105 > 104)
    return removeAllNonDigits($serverFileVersion) > removeAllNonDigits($clientFileVersion);
}

Sử dụng so sánh thủ công này thay vì dấu thời gian tôi có thể đạt được kết quả phẫu thuật hơn. Tôi hy vọng điều này có thể cung cấp cho bạn một số ý tưởng hữu ích nếu bạn có một yêu cầu tương tự.

.

Đã trả lời ngày 2 tháng 7 năm 2021 lúc 22:37Jul 2, 2021 at 22:37

Hướng dẫn php get last file in directory - php lấy tệp cuối cùng trong thư mục

2

Làm thế nào để có được tệp được tải lên cuối cùng trong PHP?

$ files = scandir ('data', scandir_sort_descending);$ newest_file = $ files [0];Trước tiên, chúng tôi liệt kê tất cả các tệp trong thư mục theo thứ tự giảm dần, sau đó, bất kỳ tên nào là đầu tiên trong danh sách đó có tên tệp "lớn nhất" - và do đó là giá trị dấu thời gian lớn nhất - và do đó là mới nhất. We first list all files in the directory in descending order, then, whichever one is first in that list has the "greatest" filename — and therefore the greatest timestamp value — and is therefore the newest.

Làm cách nào để xem tất cả các tệp PHP trong một thư mục cụ thể?

Bạn có thể esay và chỉ cần nhận danh sách tệp trong thư mục trong PHP.Hàm scandir () trong PHP là một hàm sẵn được sử dụng để trả về một mảng các tệp và thư mục của thư mục được chỉ định.Hàm scandir () liệt kê các tệp và thư mục có trong một đường dẫn được chỉ định.The scandir() function in PHP is an inbuilt function which is used to return an array of files and directories of the specified directory. The scandir() function lists the files and directories which are present inside a specified path.

Làm cách nào để xem một thư mục trong PHP?

Hàm scandir () trả về một mảng các tệp và thư mục của thư mục được chỉ định.scandir() function returns an array of files and directories of the specified directory.