Location: PHPKode > scripts > byte converter class > byte-converter-class/byte_converter.class.php
<?php

/**********************************************************************************************************
*
*  byte converter class
*  @filename: byte_converter.class.php
*  Php version PHP5.
*  version: 0.1
*  @author: Ersin Güvenç <hide@address.com>  (C) 2008.
*  Web: http://developer.bloggum.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.

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 = "zb"; //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->cut_array($this->limit);
        return $this->auto_convert($integer,$format,$toFormat);
    }  //end convert method

    /* start auto convert process*/
    function auto_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){
        $key = $this->get_key($input);
        $this->type = array_slice($this->type, 0, $key);
        return $this->type;
    //
    }

     /* 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->auto_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 )
*/
?>
Return current item: byte converter class