par
nico44530 » 26 févr. 2014, 05:52
Bonjour,
J'utilise 2 fonctions pour calculer l'espace disque d'un répertoire sur le serveur.
J'affiche le pourcentage d'espace utilisé avec un plugin : "Circliful" de jQuery (
http://ladensia.com/circliful/).
Le problème c'est que la fonction qui calcule l'espace disque utilise le Ko au lieu du Mo.
Par exemple, dans mon répertoire j'ai une image qui fait 247 Ko, le Circliful affiche l'espace disque complet puisque 247 sur 100% c'est plus que atteint.
J'aimerais que si l'espace disque utilise par exemple 530 Ko, que le Circliful affiche 0 Mo en attendant que 1 Mo soit atteint.
Voici mes 2 fonctions et mon php :
function size_readable($size, $max = null, $system = 'si', $retstring = '%01.00f%s'){
$systems['si']['prefix'] = array('B', 'Ko', 'Mo', 'Go', 'To', 'Po');
$systems['si']['size'] = 1000;
$systems['bi']['prefix'] = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
$systems['bi']['size'] = 1024;
$sys = isset($systems[$system]) ? $systems[$system] : $systems['si'];
$depth = count($sys['prefix']) - 1;
if ($max && false !== $d = array_search($max, $sys['prefix'])){
$depth = $d;
}
$i = 0;
while ($size >= $sys['size'] && $i < $depth){
$size /= $sys['size'];
$i++;
}
return sprintf($retstring, $size, $sys[$i]);
}
function dirsize($path){
$size = 0;
if (substr($path, -1, 1) !== DIRECTORY_SEPARATOR){
$path .= DIRECTORY_SEPARATOR;
}
if (is_file($path)) {
return filesize($path);
} elseif (!is_dir($path)){
return false;
}
$queue = array($path);
for ($i = 0, $j = count($queue); $i < $j; ++$i){
$parent = $i;
if (is_dir($queue[$i]) && $dir = @dir($queue[$i])){
$subdirs = array();
while (false !== ($entry = $dir->read())){
if ($entry == '.' || $entry == '..'){
continue;
}
$path = $queue[$i] . $entry;
if (is_dir($path)){
$path .= DIRECTORY_SEPARATOR;
$subdirs[] = $path;
} elseif (is_file($path)){
$size += filesize($path);
}
}
unset($queue[0]);
$queue = array_merge($subdirs, $queue);
$i = -1;
$j = count($queue);
$dir->close();
unset($dir);
}
}
return $size;
}
<?php
$dossier = 'upload/'.$data['folder'];
$dossierSize = size_readable(dirsize($dossier));
if($dossierSize < 100){
echo '<div class="circleProgress tooltip_top" title="Espace utilisée de vos photos sur le serveur / 1 Go" data-dimension="100" data-text="'.$dossierSize.'" data-fontsize="15" data-width="10" data-border="inline" data-percent="'.$dossierSize.'" data-fgcolor="#0b7baa" data-bgcolor="#d7d8d9" data-fill="#fff"></div>';
} elseif($dossierSize >= 101){
echo '<div class="circleProgress circleRed tooltip_top" title="Espace utilisée de vos photos sur le serveur / 1 Go" data-dimension="100" data-text="1 Go" data-fontsize="15" data-width="10" data-border="inline" data-percent="100" data-fgcolor="#e54a4a" data-bgcolor="#d7d8d9" data-fill="#fff"></div>';
} elseif($dossierSize <= 0.99){
echo '<div class="circleProgress tooltip_top" title="Espace utilisée de vos photos sur le serveur / 1 Go" data-dimension="100" data-text="0 '.$prefix.'" data-fontsize="15" data-width="10" data-border="inline" data-percent="0" data-fgcolor="#0b7baa" data-bgcolor="#d7d8d9" data-fill="#fff"></div>';
}
?>
MERCI DE VOTRE AIDE.
Bonjour,
J'utilise 2 fonctions pour calculer l'espace disque d'un répertoire sur le serveur.
J'affiche le pourcentage d'espace utilisé avec un plugin : "Circliful" de jQuery ([url]http://ladensia.com/circliful/[/url]).
Le problème c'est que la fonction qui calcule l'espace disque utilise le Ko au lieu du Mo.
Par exemple, dans mon répertoire j'ai une image qui fait 247 Ko, le Circliful affiche l'espace disque complet puisque 247 sur 100% c'est plus que atteint.
J'aimerais que si l'espace disque utilise par exemple 530 Ko, que le Circliful affiche 0 Mo en attendant que 1 Mo soit atteint.
Voici mes 2 fonctions et mon php :
[php]
function size_readable($size, $max = null, $system = 'si', $retstring = '%01.00f%s'){
$systems['si']['prefix'] = array('B', 'Ko', 'Mo', 'Go', 'To', 'Po');
$systems['si']['size'] = 1000;
$systems['bi']['prefix'] = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
$systems['bi']['size'] = 1024;
$sys = isset($systems[$system]) ? $systems[$system] : $systems['si'];
$depth = count($sys['prefix']) - 1;
if ($max && false !== $d = array_search($max, $sys['prefix'])){
$depth = $d;
}
$i = 0;
while ($size >= $sys['size'] && $i < $depth){
$size /= $sys['size'];
$i++;
}
return sprintf($retstring, $size, $sys[$i]);
}
function dirsize($path){
$size = 0;
if (substr($path, -1, 1) !== DIRECTORY_SEPARATOR){
$path .= DIRECTORY_SEPARATOR;
}
if (is_file($path)) {
return filesize($path);
} elseif (!is_dir($path)){
return false;
}
$queue = array($path);
for ($i = 0, $j = count($queue); $i < $j; ++$i){
$parent = $i;
if (is_dir($queue[$i]) && $dir = @dir($queue[$i])){
$subdirs = array();
while (false !== ($entry = $dir->read())){
if ($entry == '.' || $entry == '..'){
continue;
}
$path = $queue[$i] . $entry;
if (is_dir($path)){
$path .= DIRECTORY_SEPARATOR;
$subdirs[] = $path;
} elseif (is_file($path)){
$size += filesize($path);
}
}
unset($queue[0]);
$queue = array_merge($subdirs, $queue);
$i = -1;
$j = count($queue);
$dir->close();
unset($dir);
}
}
return $size;
}
[/php]
[php]
<?php
$dossier = 'upload/'.$data['folder'];
$dossierSize = size_readable(dirsize($dossier));
if($dossierSize < 100){
echo '<div class="circleProgress tooltip_top" title="Espace utilisée de vos photos sur le serveur / 1 Go" data-dimension="100" data-text="'.$dossierSize.'" data-fontsize="15" data-width="10" data-border="inline" data-percent="'.$dossierSize.'" data-fgcolor="#0b7baa" data-bgcolor="#d7d8d9" data-fill="#fff"></div>';
} elseif($dossierSize >= 101){
echo '<div class="circleProgress circleRed tooltip_top" title="Espace utilisée de vos photos sur le serveur / 1 Go" data-dimension="100" data-text="1 Go" data-fontsize="15" data-width="10" data-border="inline" data-percent="100" data-fgcolor="#e54a4a" data-bgcolor="#d7d8d9" data-fill="#fff"></div>';
} elseif($dossierSize <= 0.99){
echo '<div class="circleProgress tooltip_top" title="Espace utilisée de vos photos sur le serveur / 1 Go" data-dimension="100" data-text="0 '.$prefix.'" data-fontsize="15" data-width="10" data-border="inline" data-percent="0" data-fgcolor="#0b7baa" data-bgcolor="#d7d8d9" data-fill="#fff"></div>';
}
?>
[/php]
MERCI DE VOTRE AIDE.