用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)."\n");
}
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 , "\n"); //从最后一个\n开始一直到末尾的字符串
$last_n_len = strlen($last_n); //从最后一个\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();

  

php平均拆分大文件为N个小文件的更多相关文章

  1. python3 读取大文件分解成若干小文件

    有个数据实在太大了,有1.7G,打开慢,改文件也慢,我们将其分解成若干个中等文件 #!/usr/bin/env python3 # -*- coding: utf-8 -*-   f = open(& ...

  2. Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)

    将一个大文件分成若干个小文件方法 例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt       读出 BL ...

  3. [大牛翻译系列]Hadoop(17)MapReduce 文件处理:小文件

    5.1 小文件 大数据这个概念似乎意味着处理GB级乃至更大的文件.实际上大数据可以是大量的小文件.比如说,日志文件通常增长到MB级时就会存档.这一节中将介绍在HDFS中有效地处理小文件的技术. 技术2 ...

  4. 海量小文件存储与Ceph实践

    海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案( ...

  5. Hive如何处理小文件问题?

    一.小文件是如何产生的 1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增. 2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的). 3.数据源本身就包含大量的小 ...

  6. Hadoop小文件存储方案

    原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...

  7. 如何利用Hadoop存储小文件

    **************************************************************************************************** ...

  8. <Hadoop><SequenceFile><Hadoop小文件>

    Origin 我们首先理解一下SequenceFile试图解决什么问题,然后看SeqFile怎么解决这些问题. In HDFS 序列文件是解决Hadoop小文件问题的一个方法: 小文件是显著小于HDF ...

  9. LOSF海量小文件问题解决思路及开源库

    "+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"一.问题产生原因以 ...

随机推荐

  1. Android学习路线(六)为Android应用加入ActionBar

    Action bar 是你可以为你的应用的Activity实现的最为重要的设计元素之中的一个.它提供了集中UI特性.而且通过提供和其它的Android应用的一致性体验让你的应用可以非常快被用户熟悉.基 ...

  2. ASP.NET MVC4 ASP.NET Web API路由规则

    using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Web.Ht ...

  3. ceph 参数说明<转>

    //path/to/socket指向某个osd的admin socket文件#> ceph --admin-daemon {path/to/socket} config show | grep ...

  4. 权威指南学习心得-浏览器中的js

    window对象:表示web了浏览器的一个窗口或窗体(winow属性引用自身) 含有以下属性:location包含Location对象,指定当前显示在窗口中URL,允许脚本往窗口里载入新的URL 含有 ...

  5. 获取文件数据流+叠加byte数组(给byte数组加包头包尾)

    OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "(*.mp4)|*.mp4|(*.*)|*.*"; ofd.Res ...

  6. BZOJ 1021: [SHOI2008]Debt 循环的债务( dp )

    dp(i, j, k)表示考虑了前i种钱币(从小到大), Alice的钱数为j, Bob的钱数为k, 最小次数. 脑补一下可以发现, 只有A->B.C, B->A.C, C->A.B ...

  7. BZOJ 1951: [Sdoi2010]古代猪文( 数论 )

    显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...

  8. Collections之sort的两个方法(自然排序和自定义比较器排序)

    Collections是个服务于Collection的工具类(静态的),它里面定义了一些集合可以用到的方法. 本文演示了Collections类里sort()的两个方法.第一种只需传入被排序的集合,便 ...

  9. hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4545 这题太坑了,小明的串可以任意删掉某个字符 这句话不知道大家是怎么理解的,我觉得应该是能够删除其中 ...

  10. hdu 2471 简单DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=(  dp[n-1][m],dp[n][m-1],d[i][k ...