PHP -- 模拟测试上传文件
2013-09-29 16:19
218 查看
FROM :http://web.itivy.com/article-740-1.html
QQ上传文件为什么那么快?
“QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的。
有时候我们通过QQ上传一个几百M的文件,竟然只用了几秒钟,从带宽上限制可以得出,实际上传文件是不可能的。
实现的思路肯定是根据文件内容生成一个“唯一的标识符”,根据这个标识符去判断服务器上是否已经存在这个文件,如果存在,则不需要再次上传。
但是根据文件内容生成“唯一的标识符”,效率会不会有问题呢。
于是用PHP做个最简单的测试:
以下是代码片段:
输出结果如下:
以下是引用片段:
文件大小是:487.146002769MB
c9cb9487b71fa2130b5d1110a2819e34
Timer NO:1 Did something in 3.28920602798 seconds;
可以看到,MD5一个487M的文件,只用了3.29秒,比我预想的快了许多。因此,通过“md5('文件内容')”生成“唯一标识符”的方法是完全可行的,效率不会存在问题,我想上面的方法肯定还有优化的空间。QQ的大文件快速上传估计就是通过这样的方式实现的。在上传大文件的时候,先查询下服务器看看文件的“唯一标识符”是否存在,只要这个标识符存在,就不用再上传文件了。
扩展:
1、由于md5的特性,“md5('文件内容')”也可以用于校验“文件的完整性”和“内容是否有被修改过”,这也是我们下载一些软件时,在旁边能看到MD5效验码的原因。
2、APACHE 的 ETAG 实现:APACHE 的 ETAG 是可以自己定义方法的,较普遍的做法是根据文件的内容生成ETAG。
因为当有多台web服务器时,以浏览图片为例,想要让浏览器缓存你的图片。但你传到不同服务器上的图片时间不会一致,所以不能用文件的 last_modify时间作为cache的参照,这时候就可以采取发送ETAG,ETAG是按照图片内容生成特定字符串的。只要文件内容没有改 变,ETAG就不会改变,cache就会有效。
QQ上传文件为什么那么快?
“QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的。
有时候我们通过QQ上传一个几百M的文件,竟然只用了几秒钟,从带宽上限制可以得出,实际上传文件是不可能的。
实现的思路肯定是根据文件内容生成一个“唯一的标识符”,根据这个标识符去判断服务器上是否已经存在这个文件,如果存在,则不需要再次上传。
但是根据文件内容生成“唯一的标识符”,效率会不会有问题呢。
于是用PHP做个最简单的测试:
以下是代码片段:
<?php include("./Timer.class.php");//timer类用于统计程序运行时间 Timer::getInstance()->start();//开始计时 $big_string = file_get_contents("./test.zip");//读取文件内容 echo "文件大小是:".strlen($big_string)/(1024*1024)."MB<BR>";//输出文件大小 echo md5($big_string)."<BR>";//输出MD5后的字符串 Timer::getInstance()->printTime();//输出耗费的时间 ?>
输出结果如下:
以下是引用片段:
文件大小是:487.146002769MB
c9cb9487b71fa2130b5d1110a2819e34
Timer NO:1 Did something in 3.28920602798 seconds;
可以看到,MD5一个487M的文件,只用了3.29秒,比我预想的快了许多。因此,通过“md5('文件内容')”生成“唯一标识符”的方法是完全可行的,效率不会存在问题,我想上面的方法肯定还有优化的空间。QQ的大文件快速上传估计就是通过这样的方式实现的。在上传大文件的时候,先查询下服务器看看文件的“唯一标识符”是否存在,只要这个标识符存在,就不用再上传文件了。
扩展:
1、由于md5的特性,“md5('文件内容')”也可以用于校验“文件的完整性”和“内容是否有被修改过”,这也是我们下载一些软件时,在旁边能看到MD5效验码的原因。
2、APACHE 的 ETAG 实现:APACHE 的 ETAG 是可以自己定义方法的,较普遍的做法是根据文件的内容生成ETAG。
因为当有多台web服务器时,以浏览图片为例,想要让浏览器缓存你的图片。但你传到不同服务器上的图片时间不会一致,所以不能用文件的 last_modify时间作为cache的参照,这时候就可以采取发送ETAG,ETAG是按照图片内容生成特定字符串的。只要文件内容没有改 变,ETAG就不会改变,cache就会有效。
相关文章推荐
- php Socket模拟表单上传文件函数_学习
- PHP使用curl模拟post上传及接收文件的方法
- PHP安装FastDFS扩展,测试上传文件
- PHP使用curl模拟post上传及接收文件的方法
- PHP模拟POST上传文件
- PHP 模拟curl上传文件
- php无刷新文件上传(原创)Codeigniter框架下测试
- php 文件上传 测试过程
- PHP通过curl模拟POST上传文件,5.5之前和之后的区别
- mac10.10配置php上传文件测试代码
- jQuery+php+ajax+PHPExcel实现上传excel文件导入数据库
- PHP安全编程之文件上传攻击的防御
- PHP+Apache/nginx 文件上传大小
- PHP 文件上传
- 解决RHAS3中Apache2的PHP上传文件大小的限制
- PHP 文件上传
- File upload error - unable to create a temporary file in 错误上传文件的时候thnkphp怎么回事
- ASP模拟POST提交请求上传文件
- PHP&nbsp;大文件上传进度条实现
- PHP 文件上传