/** * Scannt ein Verzeichnis nach einem Dateipattern und * vergleicht dabei die Versionen um die aktuellste Version dieser Datei zurückgeben zu können * * Als Beispiel: * jquery-1.3.2.min.js * jquery-1.4.1.min.js * jquery-1.5.1.min.js * jquery-1.5.2.min.js * * gibt logischerweise jquery-1.5.2.min.js zurück * * @param string $directory das Verzeichnis (mit trailingsslash) welches durchsucht werden soll * @param string $search sollte der String am Anfang der Datei sein. Dies kann auch eine regexp sein (mit / umschlossen) * @param array $fileRegexps können zusätzliche reguläre Ausdrücke sein um aus einer Datei den Versionsstring herauszubekommen, diese werden benutzt, wenn das normale vorgehen (match ((?:[0-9]\.)+[0-9]) scheitert */ public static function getLatestFileVersion($directory, $search, array $fileRegexps = array()) { $standardRx = '/((?:[0-9]\\.)+[0-9])/'; $files = glob($directory . '*.*'); $maxFile = NULL; $maxVersion = 0; $searchRx = S::startsWith($search, '/') ? $search : '/^' . $search . '/'; foreach ($files as $file) { $fileName = basename($file); if (preg::match($fileName, $searchRx) > 0) { if (($version = preg::qmatch($fileName, $standardRx, 1)) == '') { foreach ($fileRegexps as $fileRx) { if (($version = preg::qmatch($fileName, $fileRegexps)) != '') { break; } } } if ($version == '') { throw new Exception('Für Datei: "' . $fileName . '" konnte keine Version extrahiert werden'); } if (version_compare($version, $maxVersion, '>')) { $maxVersion = $version; $maxFile = $file; } } } return array($maxFile, $maxVersion); }