Si le système de fichiers est ext4
(commun sur unix plus récents/Ubuntu) comme les systèmes Linux ou ntfs
(Windows), le mtime
fait avoir une précision sous-seconde.
Si le système de fichiers est ext3
(ou peut-être d'autres, c'était la norme il y a un certain temps et est toujours utilisé par RHEL), le mtime
est seulement stocké à la seconde près. Peut-être que ce vieux défaut est pourquoi PHP ne supporte que mtime
à la seconde près.
Pour récupérer la valeur en PHP, vous devez appeler un util externe, puisque PHP lui-même ne le supporte pas.
(je l'ai testé ce qui suit sur un système avec un environnement local anglais seulement, la sortie de stat
peut différer, ou le comportement strtotime
« lisible » peut différer sur les paramètres régionaux non anglais, il devrait fonctionner correctement dans un fuseau horaire,. que la sortie du stat
comprend un spécificateur de fuseau horaire qui est honorée par strtotime
)
class FileModTimeHelper
{
/**
* Returns the file mtime for the specified file, in the format returned by microtime()
*
* On file systems which do not support sub-second mtime precision (such as ext3), the value
* will be rounded to the nearest second.
*
* There must be a posix standard "stat" on your path (e.g. on unix or Windows with Cygwin)
*
* @param $filename string the name of the file
* @return string like microtime()
*/
public static function getFileModMicrotime($filename)
{
$stat = `stat --format=%y $filename`;
$patt = '/^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)\.(\d+) (.*)$/';
if (!preg_match($patt, $stat, $matches)) {
throw new \Exception("Unrecognised output from stat. Expecting something like '$patt', found: '$stat'");
}
$mtimeSeconds = strtotime("{$matches[1]} {$matches[3]}");
$mtimeMillis = $matches[2];
return "$mtimeSeconds.$mtimeMillis";
}
}
J'aime l'idée, je préfère manipuler le contenu que dormir pendant 1 seconde, ce qui est beaucoup plus rapide. Merci pour le conseil. –