這篇文章主要為大家詳細介紹了php斷點續傳之文件分割合併,具有一定的參考價值,有興趣的小夥伴們可以參考一下
php實現斷點續傳,就需要把大文件分割成多個小文件,然後單一上傳。傳完後在合併。
│ merge.php –合併檔案腳本
│ merge.zip –合併後檔案
│ socket.zip –需要分割的檔案
│ split.php –分割檔案腳本
│
└─split –分割後小檔案目錄
#下面是原始碼
##split.php<?php $fp = fopen("socket.zip", "rb"); $filesize = 10; $i = 0; $no = 1; while(!feof($fp)) { $file = fread($fp, $filesize); $fp2 = fopen("./split/socket.port".sprintf("%04d",$no).".".$i."-".($i+$filesize).".tmp", "wb"); fwrite($fp2, $file, $filesize); fclose($fp2); $i+=$filesize+1; $no++; } fclose($fp);merge.php
<?php $filelist = glob('./split/*socket*.tmp'); $filesize = 10; //print_r($filelist); $mergeFileName = 'merg.zip'; unlink($mergeFileName); $fp2 = fopen($mergeFileName,"w+"); foreach($filelist as $k => $v) { $fp = fopen($v, "rb"); $content = fread($fp, $filesize); fwrite($fp2, $content, $filesize); unset($content); fclose($fp); echo $k,"\n"; } fclose($fp2);下面的程式碼是介紹了php斷點續傳之如何分割合併檔案,需要的朋友可以參考下
<?php ini_set("memory_limit", "50M");//必须的,根据你环境的实际情况尽量大,防止报错 ini_set("max_execution_time", "100"); //file_exists() 函数检查文件或目录是否存在,存在则返回 true,否则返回 false。 //fread() 函数读取文件(可安全用于二进制文件)。fread() 从文件指针 file 读取最多 length 个字节。 //filesize() 函数返回指定文件的大小(字节)。本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。 $orgFile = 'Fireworks8-chs.exe';//源文件 $cacheFileName = 'vbcache';//分割成的临时文件块 function cutFile($fileName,$block) {//分割 global $cacheFileName; if (!file_exists($fileName)) return false; $num = 1; $file = fopen($fileName, 'rb'); while ($content = fread($file,$block)) { $cacheFile = $cacheFileName . $num++ . '.dat'; $cfile = fopen($cacheFile, 'wb'); fwrite($cfile, $content); fclose($cfile); } fclose($file); } function mergeFile($targetFile) {//合并 global $cacheFileName; $num = 1; $file = fopen($targetFile, 'wb'); while ($num > 0) { $cacheFile = $cacheFileName . $num++ . '.dat'; if (file_exists($cacheFile)) { $cfile = fopen($cacheFile, 'rb'); $content = fread($cfile, filesize($cacheFile)); fclose($cfile); fwrite($file, $content); } else { $num = -1; } } fclose($file); } //调用 cutFile($orgFile, 10 * pow(2,20)); //10 * pow(2,20) 就等于 10M pow() 函数返回 x 的 y 次方 mergeFile('ok.exe'); ?>
以上是php 檔案分割與合併(斷點續傳)的詳細內容。更多資訊請關注PHP中文網其他相關文章!