これは、単にscandir()でタイムスタンプに依存するのではなく、自分のバリデーターを使用することに自信を持った例です。
このコンテキストでは、サーバーのファイルバージョンがクライアントのバージョンよりも新しいかどうかを確認したいと思います。そこで、ファイル名のバージョン番号を比較します。
$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);
}
タイムスタンプの代わりにこの手動比較を使用すると、より外科的な結果を得ることができます。同様の要件がある場合、これがいくつかの有用なアイデアを提供できることを願っています。
(追記:私が持っていた特定の要件に関して見つけた答えに満足できなかったので、投稿するのに時間がかかりました。StackOverflowにもあまり慣れていないので親切にしてください-ありがとう!)