用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. B. Wet Shark and Bishops(思维)

    B. Wet Shark and Bishops time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  2. 关于android:screenOrientation="portrait" 横竖屏切换

    当在AndroidManifest.xml文件中定义了android:screenOrientation="portrait",就表示当我们切换横竖屏的时候,屏幕的内容始终以竖屏显 ...

  3. Android牛博

    Android实现伸缩弹力分布菜单效果 摘要: 本文介绍下在Android中实现伸缩弹力分布菜单效果.关于这种菜单效果在IPhone中比较常见,效果比较酷.那么在Android中实现只是一种简单的模仿 ...

  4. stl之map 排序

    排序问题,STL中默认是采用小于号来排序的,因为设置int等类型做key,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,insert等函数 ...

  5. WCF初步学习

    一.理解面向服务(Service-Oriented-Architecture)    是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构.S ...

  6. CSS-DOM介绍

    三位一体的网页: 我们在浏览器里看到的网页其实是由以下三层信息构成的一个共同体: 1.结构层: 结构层是由HTML和XHTML之类的标记语言所构成的.所就是哪些出现在html标签里面的单词,对网页内容 ...

  7. param

    页面之间值传递用param作为参数,提高网站安全性

  8. 2014.9.3数据库CRUD

    CRUD 增删改查 DCL 数据控制语言:备份,grant DML 数据操作语言: CRUD DDL 数据定义语言:create drop alter 自增长列不能赋值 增: Insert into  ...

  9. isalpha函数,判断字符是否是字母

    头文件:<iostream> or  <cctype>  在c语言中<ctype.h> 功能:判断一个字符是否是英文字符,是大写返回1,是小写返回2,不是英文字符返 ...

  10. 定义一个runtime的Annotation

    import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(value ...