php获取文件文档大小函数

  • 由于php获取文档大小的函数:filesize()返回文件大小的字节数,且不带单位,如果是较大的文档,只凭那一串数字并不能看出文档的实际大小,下面这个函数则是根据不同单位(KB,MB,GB,TB)进行换算。
    如果出错返回  FALSE
    function getFileSize($size){        //自行设计的得到文件大小的函数,单位为byte
            $dw="Byte";
     
            if($size >= pow(2, 40)){
                $size=round($size/pow(2, 40), 3);
                $dw="TB";
            }else if($size >= pow(2, 30)){
                $size=round($size/pow(2, 30), 3);
                $dw="GB";
            }else if($size >= pow(2, 20)){
                $size=round($size/pow(2, 20), 3);
                $dw="MB";
            }else if($size >= pow(2, 10)){
                $size=round($size/pow(2, 10), 3);
                $dw="KB";
            }else {
                $dw="Bytes";
            }
            return $size.$dw;
     
    }


    使用:
    1.     if(is_file($fileName)){
    2.         echo "{$fileName}是一个文件<br>";
    3.         echo "文件的大小为:".getFileSize(filesize($fileName))."<br>";
    4.     }

    注: 因为 PHP 的整数类型是有符号的,并且大多数平台使用 32 位整数, filesize() 函数在碰到大于 2GB 的文件时可能会返回非预期的结果。对于 2GB 到 4GB 之间的文件通常可以使用  sprintf("%u", filesize($file)) 来克服此问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP 5.2.0增加了一个取得文件上传状况的扩展。因为它不是放在PHP引擎内核中,所以如果对主机的有配置权限的话,你可以把这个扩展添加到任何PHP版本上而不必安装5.2.0版本。 PHP 5.2.0增加了一个取得文件上传状况的扩展。因为它不是放在PHP引擎内核中,所以如果对主机的有配置权限的话,你可以把这个扩展添加到任何PHP版本上而不必安装5.2.0版本。 第一步,在php.ini文件中添加拓展设置 extension=php_apc.dll ,同时添加一条开关 apc.rfc1867 = on。 第二步,把dll文件放到扩展库目录下。可以在这里http://pecl4win.php.net/ext.php/php_apc.dll下载。 第三步,restart WEB Server 就ok了。 怎么使用呢?道理很简单。对上传的文件添加一个标记,就可以在其它的php程序中用这个标记访问它。这个标记通常叫做挂钩(Hook)。在上传文件的那个表单里面添加一个名字为APC_UPLOAD_PROGRESS的隐藏域(就如同限制文件大小的那个MaxFileSize隐藏域)。‘upload_’ 加上这个隐藏域的值就是用于访问文件的钩子。例如: <input type="hidden" name="APC_UPLOAD_PROGRESS" value="<?php echo uniqid(mt_srand())?>"> 为什么钩子的值是用php的uniqid()函数取得呢?因为很多人同时上传文件的话,不同文件的钩子不能相同啊。系统会把 APC_UPLOAD_PROGRESS域的值前面加上'upload_'生成钩子名称。在其它的php程序中就可以用apc_fetch()这个函数得到该文件的一系列信息了。假设APC_UPLOAD_PROGRESS的值是45c7f4d0b5f5b,那么在php中就可以这样: $status=apc_fetch('upload_'.'45c7f4d0b5f5b'); 得到相关数组变量$status,其中$status['current']为当前已上传大小(byte),$status['total']为文件大小,上传完毕时$status['done']的值等于1。 至于客户端嘛当然是用JS取得APC_UPLOAD_PROGRESS的值了,当然还有AJAX。我们得到的上传进度并不是理想连续的,如想获得更好的用户体验,需要在客户端用JS作进一步处理。 在写这篇文档的时候,各空间商们基本没有采用版本5.2.0,文件异步上传只能使用一个折中的解决方式。此前真正的异步上传业界一直没有实现。国外有一个真正异步上传的例子,但它是在服务端用perl语言获取上传文件的信息,如果空间仅支持php不支持perl那就没辙。目前很多专做文件分享的网站都是由于具有系统配置权限从而添加了相应的服务器支持才实现的。这次php5.2.0发布的这个扩展,提供了真正的解决途径,只可惜空间商们不一定迅速采用这个版本。 目前使用的折中的解决方法是利用一个隐藏起来不显示的iframe。这个隐藏起来的iframe是真正用于上传文件的。用另一个文件域让用户选择文件,当用户选择了上传的文件之后,用JS取得用户的文件的路径然后赋值给那个隐藏的iframe中的文件域,令iframe中的表单提交。这时那个显示的文件域可以被替换为图片或者文字什么的提示用户正在上传。用上传完毕后返回的JS作完毕处理。这个方法要求熟悉JS。另外它不是真正的异步,你会发现上传的时候浏览器处于正在打开页面的状态,例如IE的地球图标在转动。关于文件异步上传就说这么多了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值