用PHP程序拆分大文件为N个小文件
/* 假设有文件data.log , 内容如下,行数很多,假设有上亿条数据,文件大小大概在800M左右 92735290 80334472 49114074 87184448 56073913 49869384 41544494 32725219 88143005 41025390 ... 50674133 88480834 73630065 84739990 28690490 82888793 32222595 76950683 62781066 69386596 需求是把这个文件平均拆分为N个小文件 0.log 92735290 80334472 49114074 ... 87184448 56073913 49869384 41544494 1.log 32725219 88143005 41025390 ... 50674133 88480834 73630065 84739990 2.log 28690490 82888793 32222595 ... 76950683 62781066 69386596 */ //废话不多说贴代码 set_time_limit(500); $file = 'data.log'; //制造1000W的行数据 $handle = fopen($file , 'wb+'); for ($i=0;$i<10000000;$i++) { fwrite($handle , rand(10000000,99999999)." "); } fclose($handle); exit(); //拆分成小文件 $sub_file_count = 100; //要拆分的文件个数 $sub_file_len = ceil(filesize($file)/$sub_file_count); //每个子文件的大小 $handle = fopen($file, "rb"); //打开文件资源 rewind($handle); //文件位置指针设为文件流的开头 $last_n_len = 0; for ($i=0;$i<$sub_file_count;$i++) { $content = fread($handle , $sub_file_len + $last_n_len); $last_n = strrchr($content , " "); //从最后一个 开始一直到末尾的字符串 $last_n_len = strlen($last_n); //从最后一个 开始一直到末尾的字符串的长度 $trim_n_content = substr($content , 0 , strlen($content) - $last_n_len); //写文件 fwrite(fopen($i.".log", "wb") , $trim_n_content); fseek($handle , ftell($handle) - $last_n_len + 1);//设置文件指针 } exit();