PHP文件大小格式化函数合集

比如碰到一个很大的文件有49957289167B,大家一看这么一长串的数字后面单位是字节B,还是不知道这个文件的大小是一个什么概念,我们把它转换成GB为单位,就是46.53GB。用下面这些函数就可以完成这个工作:


代码如下:

//转换单位
function setupSize($fileSize) {
    $size = sprintf("%u", $fileSize);
    if($size == 0) {
         return("0 Bytes");
    }
    $sizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i];
}
function byte_format($size, $dec=2){
    $a = array("B", "KB", "MB", "GB", "TB", "PB");
    $pos = 0;
    while ($size >= 1024) {
         $size /= 1024;
           $pos++;
    }
    return round($size,$dec)." ".$a[$pos];
 }
/* Use : echo format_size(filesize("fichier"));
Example result : 13,37 Ko */

function format_size($o) {
    $size = array('Go' => 1073741824, 'Mo' => 1048576, 'Ko' => 1024, 'octets' => 1);
    foreach ($size as $k => $v)
        if ($o >= $v) {
                if ($k == 'octets')
                        return round($o).' '.$k;
                return number_format($o / $v, 2, ',', ' ').' '.$k;
        }
}
/**
 * 文件大小格式化
 * @param integer $size 初始文件大小,单位为byte
 * @return array 格式化后的文件大小和单位数组,单位为byte、KB、MB、GB、TB
 */
function file_size_format($size = 0, $dec = 2) {
    $unit = array("B", "KB", "MB", "GB", "TB", "PB");
    $pos = 0;
    while ($size >= 1024) {
        $size /= 1024;
        $pos++;
    }
    $result['size'] = round($size, $dec);
    $result['unit'] = $unit[$pos];
    return $result['size'].$result['unit'];
}
echo file_size_format(123456789);

/**
 * 文件大小单位格式化
 * @param $bytes 文件实际大小,单位byte
 * @param $prec 转换后精确度,默认精确到小数点后两位
 * @return 转换后的大小+单位的字符串
 */
 function fsizeformat($bytes,$prec=2){
    $rank=0;
    $size=$bytes;
    $unit="B";
    while($size>1024){
        $size=$size/1024;
        $rank++;
    }
    $size=round($size,$prec);
    switch ($rank){
        case "1":
            $unit="KB";
            break;
        case "2":
            $unit="MB";
            break;
        case "3":
            $unit="GB";
            break;
        case "4":
            $unit="TB";
            break;
        default :

}
    return $size." ".$unit;
 }

/**
 *  容量格式化
 * @param String   文件名(文件路径)
 * @return  如果文件存在返回格式化的字符串 如果错误返回错误信息  Unknown File
 */ 
function sizeFormat ($fileName){ 
    //获取文件的大小 
    @ $filesize=filesize($fileName); 
    //如果文件不存在返回错误信息 
    if(false==$filesize){ 
       return 'Unknown File'; 
    }
    //格式化文件容量信息 
    if ($filesize >= 1073741824) $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB'; 
    elseif ($filesize >= 1048576) $filesize = round($filesize / 1048576 * 100) / 100 . ' MB'; 
    elseif ($filesize >= 1024) $filesize = round($filesize / 1024 * 100) / 100 . ' KB'; 
    else $filesize = $filesize . ' Bytes'; 
    return $filesize; 
}
//测试函数 
echo sizeFormat('config.inc.php');

/**
  * 文件大小格式化
  * @param type $filesize
  */
private function sizeCount($filesize)
{
    if ($filesize >= 1073741824) {
        $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
    }

else if ($filesize >= 1048576) {
        $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
    }

else if ($filesize >= 1024) {
        $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
    }

return $filesize;
}

//该函数最主要的是根据文件的字节数,判断应当选择的统计单位,也就是说一个文件用某一单位比如MB,那么该文件肯定小于1GB,否则当然要用GB作为单位了,而且文件要大于KB,不然的话得用更小的单位统计。该函数代码如下

//size()  统计文件大小
function size($byte)
{
    if($byte < 1024) {
      $unit="B";
    }
    else if($byte < 10240) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if($byte < 102400) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if($byte < 1048576) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if ($byte < 10485760) {
      $byte=round_dp($byte/1048576, 2);
      $unit="MB";
    }
    else if ($byte < 104857600) {
      $byte=round_dp($byte/1048576,2);
      $unit="MB";
    }
    else if ($byte < 1073741824) {
      $byte=round_dp($byte/1048576, 2);
      $unit="MB";
    }
    else {
      $byte=round_dp($byte/1073741824, 2);
      $unit="GB";
    }

$byte .= $unit;
    return $byte;
}
//辅助函数 round_up(),该函数用来取舍小数点位数的,四舍五入。
function round_dp($num , $dp)
{
  $sh = pow(10 , $dp);
  return (round($num*$sh)/$sh);
}

这样我们就能很好额统计任何一个文件的大小了,首先通过系统自带的filesize()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了

(0)

相关推荐

  • php生成PDF格式文件并且加密

    项目需求:php生成pdf文件,并且把该文件加密或设置访问密码 开源的TCPDF是基于PHP的一套类库,它能够很好的生成PDF格式的文档.并且支持文件加密,在目前的开源PHP框架.系统.应用中也使用得很广.这里是设置PDF文档的相关属性的方法原型,其中就可以设置密码 TCPDF::SetProtection ( $permissions = array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'asse

  • php 读取文件头判断文件类型的实现代码

    php代码实现读取文件头判断文件类型,支持图片.rar.exe等后缀.案例: 复制代码 代码如下: <?php $filename = "11.jpg";//为图片的路径可以用d:/upload/11.jpg等绝对路径$file = fopen($filename, "rb");$bin = fread($file, 2); //只读2字节fclose($file);$strInfo = @unpack("C2chars", $bin);$

  • php将数组转换成csv格式文件输出的方法

    本文实例讲述了php将数组转换成csv格式文件输出的方法.分享给大家供大家参考.具体实现方法如下: <?php $sales = array( array('east','2005-01-01','2005-02-01',12.54), array('west','2005-01-01','2005-02-01',546.33), array('south','2005-01-01','2005-02-01',93.26), array('north','2005-01-01','2005-02

  • php通过文件头检测文件类型通用代码类(zip,rar等)

    有时候我们这样做还不完善.可能有些人上存一些文件,但是他通过修改扩展名,让在我们的文件类型之内. 单实际访问时候又不能展示(因为扩展名与文件内容不符).下面这个php类,可能能够给我们带来帮助.一.php检测类 首先说明下,上面文件头与文件类型映射关系来自网上,如果你有新的文件需要检查,只需要将映射加入即可. 如果你需要知道文件头信息,可以通过工具:winhex打开标准文件查找.如: 代码: 复制代码 代码如下: <?php /*通过文件名,获得文件类型* *@author chengmo* *

  • PHP取二进制文件头快速判断文件类型的实现代码

    一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,PHP扩展中提供了类似 exif_imagetype 这样的函数读取图片类的文件类型,但是很多时候扩展不一定安装了,有时候就需要自己来实现识别文件类型的工作. 下面代码就展示了自己通过读取文件头信息来识别文件的真实类型. 复制代码 代码如下: <?php     $files = array(        'c:\1.jpg',        'c:\1.png',     

  • PHP 强制性文件下载功能的函数代码(任意文件格式)

    复制代码 代码如下: /******************** *@file - path to file */ function force_download($file) { if ((isset($file))&&(file_exists($file))) { header("Content-length: ".filesize($file)); header('Content-Type: application/octet-stream'); header('

  • PHP 基于文件头的文件类型验证类函数

    我这里写了一个验证类,是通过文件头来判断文件格式.(也不是百分之百安全,如果用户伪造了文件头,也能通过验证) 复制代码 代码如下: <?php /** * 检证文件类型类 * * @author Silver */ class FileTypeValidation { // 文件类型,不同的头信息 private static $_fileFormats = Array( 'jp2' => '0000000C6A502020',<br/> '3gp' => '00000020

  • php下载文件源代码(强制任意文件格式下载)

    一个简单的php文件下载源代码,虽不支持断点续传等,但是可以满足一些常用的需求了.php下载文件其实用一个a标签就能实现,比如 <a href="web/magento-1.8.1.0.zip">magento-1.8.1.0.zip</a> .但是遇到一些浏览器能识别的格式,比如.txt,.html,.pdf等,再用<a href="web/abc.txt">abc.txt</a> 想必也知道会发生什么了. 复制代码

  • PHP文件缓存内容保存格式实例分析

    本文实例讲述了PHP文件缓存内容保存格式,对于进行PHP项目开发非常具有实用价值.分享给大家供大家参考借鉴.具体分析如下: 1.PHP文件缓存内容保存格式 PHP文件缓存内容保存格式主要有三种: (1)变量 var_export 格式化成PHP正常的赋值书写格式: (2)变量 serialize 序列化之后保存,用的时候反序列化: (3)变量 json_encode格式化之后保存,用的时候json_decode 互联网上测试结果是:serialize格式的文件解析效率大于Json,Json的解析

  • php通过文件头判断格式的方法

    本文实例讲述了php通过文件头判断格式的方法.分享给大家供大家参考,具体如下: function judgeFile($file,$form){ if(!empty($file) && !empty($form)){ $filehead = fopen($file,'r'); $bin = fread($filehead, 2); fclose($filehead); $data = unpack('C2chars', $bin); $type_code = intval($data['c

  • php下把数组保存为文件格式的实例应用

    我使用过两种办法: 第一种是数组序列化,简单,但是调用时比较麻烦一些:第二种是保存为标准的数组格式,保存时麻烦但是调用时简单. 第一种方法: PHP代码 复制代码 代码如下: $file="./cache/file.cache"; $array = array("color" => array("blue", "red", "green"), "size" => array(

  • php格式输出文件var_export函数实例

    本文实例讲述了php格式输出文件var_export函数的用法.分享给大家供大家参考.具体如下: var_export:php 4 >= 4.2.0, php 5 var_export -- 输出或返回一个变量的字符串表示. 描述:mixed var_export (mixed expression [,bool return]) 此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 php 代码,您可以通过将函数的第二个参数设置为 true

随机推荐