PHP 读取大文件

简介:

最近在工作中遇到了需要读取系统日志的问题,日志文件很大,大概在1G以上甚至更大,随即研究了读取得方法,直接使用PHP自带的函数就可以解决这几个问 题,但是绝对不能使用file和file_get_contents,这两个函数是一次性将文件全部加载进来,如果文件在几十M 还是可以的,但是稍大的文件时不能用的,内存是会溢出的 ,贴个自己的方法,欢迎大家指教!

Java代码   收藏代码
  1. <?  
  2. /** 
  3. * PHP 读取大文件 测试文件大于1G的文本文件 
  4. * 
  5. * @copyright(c) 2010 by 高成. All rights reserved 
  6. * @author 高成 
  7. * 
  8. */  
  9. /** 
  10. * 文件读取 
  11. * 
  12. * @param String $filename 文件地址 
  13. * @param Int $count 读取得行数 
  14. * @param String $sep 每行的分隔标记 
  15. * @return String 返回结果 
  16. */  
  17. function readBigFile($filename, $count = 20, $tag = '\r\n') {  
  18.     $content = '';//最终内容  
  19.     $_current = '';//当前读取内容寄存  
  20.     $step= 1;//每次走多少字符  
  21.     $tagLen = strlen($tag);  
  22.     $start = 0;//起始位置  
  23.     $i = 0;//计数器  
  24.     $handle = fopen($filename,'r+');//读写模式打开文件,指针指向文件头  
  25.     while($i < $count && !feof($handle)) {    //文件没有到结尾和小鱼需要读取得行数时  
  26.         fseek($handle, $start, SEEK_SET);//指针设置在文件开头  
  27.         $_current = fread($handle,$step);//读取文件  
  28.         $content .= $_current;//组合字符串  
  29.         $start += $step;//依据步长向前移动  
  30.         //依据分隔符的长度截取字符串最后免得几个字符  
  31.         $substrTag = substr($content, -$tagLen);  
  32.         if ($substrTag == $tag) {    //判断是否为判断是否是换行或其他分隔符  
  33.             $i++;  
  34.         }  
  35.     }  
  36.     //关闭文件  
  37.     fclose($handle);  
  38.     //返回结果  
  39.     return $content;  
  40. }  
  41. $filename = 'E:/2010log.log';//需要读取的文件  
  42. $tag = '\r\n';//行分隔符 注意这里必须用双引号  
  43. $count = 20;//读取行数  
  44. $data = readBigFile($filename,$count,$tag);  
  45. echo $data;  
  46. ?>  
相关文章
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
326 1
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
PHP
PHP遍历文件并同步上传到服务器
在进行网站迁移时,由于原网站的图片文件过多,采用打包下载再上传的方式耗时过长,且尝试使用FTP工具从旧服务器传输至新服务器时失败。为解决此问题,特使用PHP编写了一款工具,该工具能扫描指定目录下的所有`.webp`图像文件,并将其上传至新的服务器,极大地提高了迁移效率。
290 16
|
存储 安全 数据库连接
php.ini 文件的用途是什么?
【8月更文挑战第29天】
318 1
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
227 0
PHP——调用java文件中的方法
进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
这段代码实现了一个网站上弹出的促销海报动画效果,包含一个关闭按钮。当促销海报弹出时,会在三秒后开始抖动一两下。海报使用固定定位居中显示,带有阴影和圆角,关闭按钮位于右上角。可以通过修改时间参数调整弹出时间。
149 0
|
API PHP UED
​一个PHP文件实现联系表单自动发送邮件
使用PHP和AOKSend服务,可以创建一个联系表单,收集用户信息并自动发送邮件。HTML表单包含姓名、邮箱和消息字段。PHP文件`send_mail.php`处理表单提交,通过AOKSend的SMTP设置(如主机、端口、API密钥)使用PHPMailer发送邮件到指定地址。代码中还包括安全措施,如使用`htmlspecialchars`防止XSS攻击。这种方法增强了网站的用户沟通体验,并依赖AOKSend的稳定性和API进行高效邮件发送。
|
PHP
php怎么循环读取文件夹里的文件
`DirectoryIterator`类提供了一个接口来遍历文件系统目录。与 `glob`函数相比,使用 `DirectoryIterator`类可以获得更多文件属性信息,如文件大小、修改时间等,从而进行更复杂的文件处理操作。
207 0