引言:读写大“二进制”文件,不必申请很大内存(fopen、fread、fwrite、fclose)!做到开源节流,提高速度!
每天告诉自己一次,『我真的很不错』....
加速读写大文件,在实际工作过程当中其实想必很多人都有这样的经历-大家知道,如果使用记事本(notepad)打开10M的文本文件,那会卡到无响应,但是如果使用Sublime或者Notepad++则瞬间打开。
不展开讲了,接口简单,多说无益,直接上码。
函数
<?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * @param string $srcPath 源文件路径 * @param string $dstPath 目标文件路径 * @return bool */ function fetch_big_file($srcPath, $dstPath) { // 设置脚本执行时间无限长 set_time_limit(0); if (!$fpSrc = fopen($srcPath,"rb")) { return false; } // 写文件 - 是否已打开? $isWriteFileOpen = false; do { // 每次读取 8*1024个字节 $data = fread($fpSrc, 8192); if (!$data) { break; } else if (!$isWriteFileOpen) { // 第一次读取文件,并且有内容,才创建文件 $fpDst = fopen($dstPath,"wb"); $isWriteFileOpen = true; fwrite($fpDst, $data); } else { // 写入 fwrite($fpDst, $data); } } while (true); fclose($fpSrc); fclose($fpDst); return true; } // 功能示例: $srcPath = 'd:/PHP/data/eclipse-jee-kepler-R-win32-x86_64.pdf'; $dstPath = 'Z:/reslibCovertingfiles/eclipse-jee-kepler-R-win32-x86_64.pdf'; fetch_big_file($srcPath, $dstPath); echo 'success';
各位看官,如果有误,请无情指出!
未完待续……。
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4794186.html