PHP Classes
elePHPant
Icontem

File: byte_converter.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Ersin Güvenç  >  byte converter class  >  byte_converter.class.php  >  Download  
File: byte_converter.class.php
Role: Class source
Content type: text/plain
Description: main class
Class: byte converter class
Convert byte counts into KB, MB, GB and TB
Author: By
Last change: changed auto_convert to convert function, deleted unnecessary $this->cut_array() parts.
Date: 5 years ago
Size: 5,507 bytes
 

Contents

Class file image Download
<?php

/**********************************************************************************************************
*
* byte converter class
* @filename: byte_converter.class.php
* Php version PHP5.
* version: 0.2
* @author: Ersin Guvenc <eguvenc@gmail.com> (C) 2008 - 2009.
* Web: http://develturk.com
* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License Version 2.1
*
*/

//some details .. http://en.wikipedia.org/wiki/Byte
//catch all error.. you can customize exception class.look at php5 manual.
//Thanks Leo Venturini for some bugs in version 0.1.

Class byte_Exception extends Exception
{
    function
__toString(){
    return
__CLASS__ . ": [Error]: {$this->getMessage()} [Line]: {$this->getLine()}\n";
    }
}

/* Simple Calculator */
Class calc
{
private static
$meter = "1024";
   
//static function compute
   
public static function compute($input,$operator,$iterate){
        switch (
$operator) {
        case
'*':
           
$total = $input * self::$meter;
            for(
$i=1; $i<=$iterate-1; $i++)
           
$total = $total * self::$meter;
            break;
        case
'/':
           
$total = $input / self::$meter;
            for(
$i=1; $i<=$iterate-1; $i++)
           
$total = $total / self::$meter;
            break;
        }
        return
$total;
    }
}

Class
byte_converter
{

public
$format = ""; //incoming format string.
public $toFormat = ""; //output format string.
public $integer = ""; //input number integer.
/* data types array */
public $type = array('b', //0 byte
                       
'kb', //1 kilo
                       
'mb', //2 mega
                       
'gb', //3 giga
                       
'tb', //4 tera
                       
'pb', //5 peta
                       
'eb', //6 exa
                       
'zb', //7 zetta
                       
'yb'); //8 yotta

public $limit = ""; //calculate limit for data types..
private $result = array(); //auto convert result associative array.


   
function _set_params($integer,$format,$toFormat)
    {
       
$this->integer = $integer;
       
$this->format = strtolower($format);
       
$this->toFormat = $toFormat;
       
//$this->cut_array($this->limit);
   
}

   
//set limit for control the data types..
   
function set_limit($type)
    {
       
$this->limit = $type;
    }

   
/* get right operator */
   
function get_operator()
    {
        if(
$this->get_key($this->format) > $this->get_key($this->toFormat))
        {
           
$operator = "*";
           
        }elseif(
$this->get_key($this->format) < $this->get_key($this->toFormat))
        {
           
$operator = "/";
        }
        return
$operator;
    }

   
/* get key type */
   
function get_key($type)
    {
       
$key = array_keys($this->type,$type);
        return
$key[0];
    }

   
/* start manual convert process*/
   
function convert($integer,$format,$toFormat)
    {
       
$this->_set_params($integer,$format,$toFormat);
       
$iterate = $this->get_key($this->format) - $this->get_key($this->toFormat);
       
        if(
$iterate < 0)
       
$iterate = $iterate * -1; //turn to positive
       
       
$operator = $this->get_operator();
        return
calc::compute($this->integer,$operator,$iterate);
    }
//end convert method
   

    /* cut array function for limit to data types.. */
   
function cut_array($input='')
    {
        if(
$input == "")
        return
FALSE;
       
       
$key = $this->get_key($input);
       
$this->type = array_slice($this->type, 0, $key);
    }

    
/* basic array delete. */
   
function array_delete($array,$val)
    {
        if(!
in_array($val,$this->type,true))
        throw new
byte_Exception('This is not an array ! '.__FUNCTION__.' error!');
       
       
$new = array();
        foreach(
$array as $k=>$v)
        {
            if(
is_array($v))
            throw new
byte_Exception('This is not a flat array ! '.__FUNCTION__.' error!');
           
            if(
$val !== $v)
            {
               
$new[$k] = $v;
            }
        }
       
        return
$new;
    }

   
/* auto convert to another formats it returns associative array */
   
function auto($integer,$format)
    {
   
//get new types except $format
       
$this->cut_array($this->limit);
       
$new_types = $this->array_delete($this->type,$format);
       
       
//run auto convert
       
$result = array();
        foreach(
$new_types as $toFormat)
        {
           
//$byte = new byte_converter;
           
$this->result[$toFormat] = $this->convert($integer,$format,$toFormat);
        }
        return
$this->result;
    }

}
//end of the byte converter class...


/* EXAMPLE MANUAL CONVERT
try{
$byte = new byte_converter;
$total = $byte->convert("128849018880","b","kb");
echo $total;
}catch(Exception $e) {echo $e;}

//OUTPUT 125829120

/* EXAMPLE AUTO COVERT

try{
$byte = new byte_converter;
$byte->set_limit("tb"); //show types which before the tera byte
$result = $byte->auto("1048576000","kb");
print_r($result);
}catch (Exception $e) {echo $e;}

//OUTPUT

Array (
[b] => 1073741824000
[mb] => 1024000
[gb]=> 1000
//limit
[tb] => 0.9765625
[pb] => 0.000953674316406
[eb] => 9.31322574615E-7
[zb] => 9.09494701773E-10
[yb] => 8.881784197E-13 )
*/
?>