Log in

View Full Version : Bytes conversion


Excalibur82
04-06-2009, 03:50 AM
Is there already a functions or class that can be used to convert bytes to whatever it should be such as KB, MB, GB, etc?

I have been trying to find a conversion method to include with my mod but every one of the method's I have found don't work, either I can't seem to get them to match vB or something.

Here is one I found:
function ByteSize($bytes)
{
$size = $bytes / 1024;
if($size < 1024)
{
$size = number_format($size, 2);
$size .= ' KB';
}
else
{
if($size / 1024 < 1024)
{
$size = number_format($size / 1024, 2);
$size .= ' MB';
}
else if ($size / 1024 / 1024 < 1024)
{
$size = number_format($size / 1024 / 1024, 2);
$size .= ' GB';
}
}
return $size;
}

// Returns '19.28mb'
print ByteSize('20211982');

Another method I found:
function formatRawSize($bytes) {

//CHECK TO MAKE SURE A NUMBER WAS SENT
if(!empty($bytes)) {

//SET TEXT TITLES TO SHOW AT EACH LEVEL
$s = array('bytes', 'kb', 'MB', 'GB', 'TB', 'PB');
$e = floor(log($bytes)/log(1024));

//CREATE COMPLETED OUTPUT
$output = sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));

//SEND OUTPUT TO BROWSER
return $output;

}
}

Thanks in advance

Lynne
04-06-2009, 03:57 AM
function vbmksize($bytes) {
if ($bytes < 1000 * 1024)
return number_format($bytes / 1024, 2) . " KB";
if ($bytes < 1000 * 1048576)
return number_format($bytes / 1048576, 2) . " MB";
if ($bytes < 1000 * 1073741824)
return number_format($bytes / 1073741824, 2) . " GB";
return number_format($bytes / 1099511627776, 2) . " TB";
}

Excalibur82
04-06-2009, 04:03 AM
Ok now how do I implement that into my file?

Do I use this:
$query = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "download AS download
LEFT JOIN " . TABLE_PREFIX . "download_screenshots AS screenshots ON (screenshots.file_id = download.id)");
while ($dl = $db->fetch_array($query))
{
$id = $dl['id'];
$version = $dl['version'];
$name = $dl['name'];
$size = $dl['size'];
$description = $dl['description'];
$username = $dl['username'];
$userid = $dl['userid'];
$sid = $dl['sid'];
$screenshot = $dl['sdata'];

$this->vbmksize($size);

eval('$display_shots .= "' . fetch_template('bfc_download_screenshot_display') . '";');
eval('$display_bit .= "' . fetch_template('bfc_download_bit') . '";');

}

Notice the bold red code. Is that how it gets used? vBulletin functions are still new to me, sorry.

Lynne
04-06-2009, 04:15 AM
This should work:
$whatever = vbmksize($size);

Your functions are probably fine also. I've just been using the one I posted forever and haven't ever bothered to change it.

Excalibur82
04-06-2009, 04:17 AM
thank you, gonna give that a try now.

--------------- Added 1238995567 at 1238995567 ---------------

Worked like a charm, tyvm.

--------------- Added 1238995605 at 1238995605 ---------------

BTW, what file is vbmksize() function located in? I had to create my own file but would rather include a vb file if it already exists in one.