php读取操作大文件,超出内存大小,三种方法
2014-12-31 10:27
411 查看
在php中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法。
需求
有一个800M的日志文件,大约有500多万行, 用php返回最后几行的内容。
实现方法
1.2B行为,简单粗暴,简单直接采用file函数来操作
注:由于 file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M来进行设置,这个值如果设置-1,则内存使用量不受限制.
下面是一段用file来取出这具文件最后一行的代码.
帮助
整个代码执行完成耗时 116.9613 (s).
我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万 不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了.
2.直接调用linux的tail命令来显示最 后几行
在linux命令行下,可以直接使用tail -n 10 access.log很轻易的显示日志文件最后几行,可以直接用php来调用tail命令,执行php代码如下.
帮助
整个代码执行完成耗时 0.0095 (s)
方法二
还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换 行符(\n)的个数来判断是否已经读完最后$num行数据.
实现代码如下
帮助
整个代码执行完成耗时 0.0009(s).
方法三
帮助
整个代码执行完成耗时 0.0003(s)
转自:http://www.4wei.cn/archives/1001748
需求
有一个800M的日志文件,大约有500多万行, 用php返回最后几行的内容。
实现方法
1.2B行为,简单粗暴,简单直接采用file函数来操作
注:由于 file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M来进行设置,这个值如果设置-1,则内存使用量不受限制.
下面是一段用file来取出这具文件最后一行的代码.
帮助
我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万 不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了.
2.直接调用linux的tail命令来显示最 后几行
在linux命令行下,可以直接使用tail -n 10 access.log很轻易的显示日志文件最后几行,可以直接用php来调用tail命令,执行php代码如下.
帮助
方法二
还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换 行符(\n)的个数来判断是否已经读完最后$num行数据.
实现代码如下
帮助
方法三
帮助
转自:http://www.4wei.cn/archives/1001748
相关文章推荐
- php读取文件内容的三种方法
- PhpMyAdmin导入数据时提示文件大小超出PHP限制的解决方法
- php读取文件内容的三种可行方法示例介绍
- PHP读取远程文件的三种方法
- PHP读取远程文件的三种方法
- PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
- 三种方法实现php网络请求(表单操作文件上传)
- php读取文件内容的三种可行方法示例介绍
- PHP读取远程文件的三种方法
- PhpMyAdmin导入数据时提示文件大小超出PHP限制的解决方法
- PHP文件读写操作之文件读取方法详解
- PHP之读取远程文件的三种方法
- php获取远程文件大小的三种方法(实例代码)
- PHP文件读写操作之文件读取方法详解
- PHP读取远程文件的三种方法
- java读取文件内容的三种方法代码片断分享(java文件操作)
- Asp.net(C#)对文件操作的方法(读取,删除,批量拷贝,删除...)
- 用 PHP 读取文件的正确方法
- 用PHP脚本在Linux系统上读取输入和对文件进行操作
- PHP读取,写入MYSQL数据库文件操作