用PHP读取超大型文件的实例代码
去年年底,各大网站的账户信息数据库泄漏,这是真棒啊,还趁机下载了几个数据库,准备学习数据分析师分析这些账户信息。虽然这些数据信息进行了整理,但它是从中吸取教训,可毕竟有这么一个大数据量。大数据量的问题是一个单一的文件是非常大的,它是不容易打开,这file.mssql客户端不能这个SQL文件直接存储打开,原因据说是MSSQL读取数据时,是一次性读入内存中的数据,如果数据太大,和记忆的缺失,这将直接导致系统崩溃。
导航猫数据库管理
这里推荐一个软件Navicat Premium,很棒啊,几兆的SQL文件很容易打开,一张小小的卡片,这个客户端软件支持MSSQL,MySQL,Oracle…等等,等等。许多其他功能正在慢慢研究中。
虽然Navicat能打开CSDN 274mb SQL文件,但内容毫无意义,而且不方便查询、分类、统计等。唯一的办法就是看这些数据一个接一个,然后将每个记录的不同的碎片,然后这些碎片在数据字段的格式存储到数据库中,可用于以后。
使用PHP读取超大文件
PHP有许多方式去阅读并采取适当方法基于目标文件的差异,可有效提高执行效率。因为CSDN数据库文件比较大,我们尽量不要在短时间内阅读。在读取单个数据之后,我们需要分离和写入操作,更合适的方法是读取分区域中的文件。用PHP与fseek和fread结合,你可以随机读取文件中的数据部分。
复制代码代码如下所示:
功能readbigfile($文件名,$数= 20美元= 标签, R{)
$;最后的内容
当前值= 读当前存款
$步骤= 1; /去多少字符
taglen美元= strlen($标记);
$开始= 0;开始位置
$ i = 0; /计数器
为处理= fopen($文件名,R + '); / /读写模式打开文件指针到文件的起始位置
而($ i一千美元计算!Feof($处理)){
fseek(合处理,美元开始,seek_set); / /指针设置在文件的开头
目前美元= fread($手柄,一美元); / /读取文件
$当前
在步骤前进的基础上
根据字符串分隔符的长度/最后几个字符
substrtag美元= substr(合内容,至taglen);
如果($ substrtag = = $标记){ / /判断来确定它是否是一个换行符或其他分隔符
美元+;
$;
}
}
关闭文件
Fclose($处理);
返回结果
返回$内容;
}
为文件名=CSDN。SQL ; / /文件的读取
$这里的行分隔符注释必须使用双引号。
$ = 100;读取行号
数据readbigfile美元(美元美元美元数,文件名,标签);
回波数据;
至于函数传递的变量$标记的值,传递的值也不同于系统:Windows使用 Linux使用而Mac OS使用R。
程序执行的一般过程:首先,定义一些基本变量来读取文件,然后打开文件,在文件的指定位置找到指针,并读取指定大小的内容。
不要想当然地认为程序中的一切都按计划运行。
根据上面的代码,虽然我们可以在文件中得到指定的位置和指定的大小数据,但是整个过程只执行一次,我们不能得到所有的数据,为了得到所有的数据,我们可以添加循环来决定文件是否完成,但是这是对系统资源的浪费。即使文件太大,它也不能读取,这会导致PHP执行超时。另一种方法是在读取数据后记录和存储指针的位置。然后,当循环再次执行时,它将在最后一个位置定位指针,这样就不会出现从开始到结束读取文件的情况。
事实上,CSDN数据库没有被导入到数据库中,因为在那个时候,有几天在cnBeta分析。当你看到有人这样做了,没有能自动地做它,但是去学习,这需要时间来完成它。