• 技术文章 >后端开发 >php教程

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

    2016-05-17 08:48:00原创401
    比如碰到一个很大的文件有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()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP PHP格式化函数
    上一篇:php调用C代码的实现方法_php技巧 下一篇:PHP中isset()和unset()函数的用法小结_php实例
    大前端线上培训班

    相关文章推荐

    • PHP数据库学习之怎样使用PDO执行SQL语句?• PHP数据库学习之怎样使用PDO连接数据库?• PHP表单学习之表单的输入与验证• PHP数据库学习之怎样使用PDO获取查询结果?• PHP中怎样去连接MySQL数据库?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网