php实现读取超大文件的方法

2015-01-24信息快讯网

这篇文章主要介绍了php实现读取超大文件的方法,需要的朋友可以参考下

通常来说在php读取大文件的时候,我们采用的方法一般是一行行来讲取,而不是一次性把文件全部写入内存中,这样会导致php程序卡死,下面就给大家介绍这样一个例子。

读取大文件最后几行数据:

<?php
/**
 * 取文件最后$n行
 * 
 * @param string $filename 文件路径
 * @param int $n 最后几行
 * @return mixed false表示有错误,成功则返回字符串
 */
function FileLastLines($filename, $n){
   if(!$fp = fopen($filename, 'r')){
    echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";
    return false;
    }
  $pos = -2;
  $eof = "";
  $str = "";
  while($n > 0){
    while($eof != "n"){
      if(!fseek($fp, $pos, SEEK_END)){
        $eof = fgetc($fp);
        $posC;
        }else{
        break;
        }
      }
    $str .= fgets($fp);
    $eof = "";
    $nC;
    }
  return $str;
  }

echo nl2br(FileLastLines('sss.txt', 4));
/**
 * * * 取文件最后$n行 *
 * 
 * @param string $filename 文件路径 *
 * @param int $n 最后几行 *
 * @return mixed false表示有错误,成功则返回字符串
 */
function FileLastLines($filename, $n){
  if(!$fp = fopen($filename, 'r')){
    echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";
    return false;
    }
  $pos = -2;
  $eof = "";
  $str = "";
  while($n > 0){
    while($eof != "n"){
      if(!fseek($fp, $pos, SEEK_END)){
        $eof = fgetc($fp);
        $pos--;
        }else{
        break;
        }
      }
    $str .= fgets($fp);
    $eof = "";
    $n--;
    }
  return $str;
  }
echo nl2br(FileLastLines('sss . txt', 4));

function tail($fp, $n, $base = 5)
{
  assert($n > 0);
  $pos = $n + 1;
  $lines = array();
  while(count($lines) < = $n){
    try{
      fseek($fp, - $pos, SEEK_END);
      }
    catch (Exception $e){
      fseek(0);
      break;
      }
    $pos *= $base;
    while(!feof($fp)){
      array_unshift($lines, fgets($fp));
      }
    }
  return array_slice($lines, 0, $n);
  }
var_dump(tail(fopen("access.log", "r+"), 10));
$fp = fopen($file, "r");
$line = 10;
$pos = -2;
$t = " ";
$data = "";
while ($line > 0){
  while ($t != "n"){
    fseek($fp, $pos, SEEK_END);
    $t = fgetc($fp);
    $pos --;
    }
  $t = " ";
  $data .= fgets($fp);
  $line --;
  }
fclose ($fp);
echo $data;
?>

读者可以根据该实例特点加以改进和完善,使之更加符合自身应用需求。

php运行提示:Fatal error Allowed memory size内存不足的解决方法
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
apache中为php 设置虚拟目录
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Linux中为php配置伪静态
PHP使用glob函数遍历目录或文件夹的方法
php使用ereg验证文件上传的方法
jQuery Mobile + PHP实现文件上传
php自定文件保存session的方法
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
PHP 读取和编写 XML
php 使用file_get_contents读取大文件的方法
php使用fgetcsv读取csv文件出现乱码的解决方法
PHP读取CURL模拟登录时生成Cookie文件的方法
ThinkPHP实现二级循环读取的方法
PHP fastcgi模式上传大文件(大约有300多K)报错
Win2003+apache+PHP+SqlServer2008 配置生产环境
将CMYK颜色值和RGB颜色相互转换的PHP代码
php Imagick获取图片RGB颜色值
PHP exif扩展方法开启详解
PHP中unset,array_splice删除数组中元素的区别
PHP常用数组函数介绍
windows的文件系统机制引发的PHP路径爆破问题分析
php的mkdir()函数创建文件夹比较安全的权限设置方法
2个Codeigniter文件批量上传控制器写法例子
合并ThinkPHP配置文件以消除代码冗余的实现方法
PHP中使用glob函数实现一句话删除某个目录下的所有文件
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
PHP读取RSS(Feed)简单实例
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
php读取富文本的时p标签会出现红线是怎么回事
php读取3389的脚本
PHP按行读取文件时删除换行符的3种方法
php读取大文件示例分享(文件操作类)
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
PHP读取大文件的类SplFileObject使用介绍
php设置允许大文件上传示例代码
©2014-2024 dbsqp.com