Login   Register  
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->type0$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 )
*/
?>