Skip to content
Extraits de code Groupes Projets
Valider fee92083 rédigé par Eric Lupinacci's avatar Eric Lupinacci Validation de marcimat
Parcourir les fichiers

change: Le filtre `taille_en_octets()` retourne des unités cohérentes

- Par défaut en système binaire (Kio, Mio, Gio…)
- On peut demander en système décimal (Ko, Mo, Go…)

```php
taille_en_octets(1024 * 10); // 10 kio (BI par défaut)
taille_en_octets(1024 * 10, 'BI'); // 10 kio
taille_en_octets(1024 * 10, 'SI'); // 10.2 ko
```

Refs: #5046
parent 2ae0c615
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -1290,43 +1290,56 @@ function majuscules($texte) { ...@@ -1290,43 +1290,56 @@ function majuscules($texte) {
} }
/** /**
* Retourne une taille en octets humainement lisible * Renvoie une taille de dossier ou de fichier humainement lisible en ajustant le format et l'unité.
* *
* Tel que "127.4 ko" ou "3.1 Mo" * La fonction renvoie la valeur et l'unité en fonction du système utilisé (binaire ou décimal).
* *
* @example * @example
* - `[(#TAILLE|taille_en_octets)]` * - `[(#TAILLE|taille_en_octets)]` affiche xxx.x Mio
* - `[(#VAL{123456789}|taille_en_octets)]` affiche `117.7 Mo` * - `[(#VAL{123456789}|taille_en_octets{BI})]` affiche `117.7 Mio`
* - `[(#VAL{123456789}|taille_en_octets{SI})]` affiche `123.5 Mo`
* *
* @filtre * @filtre
* @link https://www.spip.net/4316 *
* @param int $taille * @param int $octets Taille d'un dossier ou fichier en octets
* @return string * @param string $systeme Système d'unité dans lequel calculer et afficher la taille lisble. Vaut `BI` (défaut) ou `SI`.
**/ *
function taille_en_octets($taille) { * @return string Taille affichée de manière humainement lisible
if (!defined('_KILOBYTE')) { */
/** function taille_en_octets($octets, $systeme = 'BI') {
* Définit le nombre d'octets dans un Kilobyte
* // Texte à afficher pour la taille
* @var int $affichage = '';
**/
define('_KILOBYTE', 1024); static $unites = ['octets', 'ko', 'mo', 'go'];
} static $precisions = [0, 1, 1, 2];
if ($octets >= 1) {
// Déterminer le nombre d'octets représentant le kilo en fonction du système choisi
$systeme = strtolower($systeme);
if ($systeme === 'bi') {
$kilo = 1024;
$suffixe_item = "_$systeme";
} elseif ($systeme === 'si') {
$kilo = 1000;
$suffixe_item = '';
} else {
return $affichage;
}
if ($taille < 1) { // Identification de la puissance en "kilo" correspondant à l'unité la plus appropriée
return ''; $puissance = floor(log($octets, $kilo));
}
if ($taille < _KILOBYTE) { // Calcul de la taille et choix de l'unité
$taille = _T('taille_octets', ['taille' => $taille]); $affichage = _T(
} elseif ($taille < _KILOBYTE * _KILOBYTE) { 'spip:taille_' . $unites[$puissance] . $suffixe_item,
$taille = _T('taille_ko', ['taille' => round($taille / _KILOBYTE, 1)]); [
} elseif ($taille < _KILOBYTE * _KILOBYTE * _KILOBYTE) { 'taille' => round($octets / pow($kilo, $puissance), $precisions[$puissance])
$taille = _T('taille_mo', ['taille' => round($taille / _KILOBYTE / _KILOBYTE, 1)]); ]
} else { );
$taille = _T('taille_go', ['taille' => round($taille / _KILOBYTE / _KILOBYTE / _KILOBYTE, 2)]);
} }
return $taille; return $affichage;
} }
......
...@@ -635,6 +635,10 @@ et vous reconnecter au site. ...@@ -635,6 +635,10 @@ et vous reconnecter au site.
'taille_ko' => '@taille@ ko', 'taille_ko' => '@taille@ ko',
'taille_mo' => '@taille@ Mo', 'taille_mo' => '@taille@ Mo',
'taille_octets' => '@taille@ octets', 'taille_octets' => '@taille@ octets',
'taille_go_bi' => '@taille@ Gio',
'taille_ko_bi' => '@taille@ kio',
'taille_mo_bi' => '@taille@ Mio',
'taille_octets_bi' => '@taille@ octets',
'texte_actualite_site_1' => 'Quand vous serez familiarisé(e) avec l’interface, vous pourrez cliquer sur « ', 'texte_actualite_site_1' => 'Quand vous serez familiarisé(e) avec l’interface, vous pourrez cliquer sur « ',
'texte_actualite_site_2' => 'interface complète', 'texte_actualite_site_2' => 'interface complète',
'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter