PHP 读取和修改大文件的某行内容的代码

 更新时间:2009年10月30日 20:20:43   作者:  
最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串。
复制代码 代码如下:

$fp = fopen('d:/file.txt', 'r+');
if ($fp) {
$i = 1;
while (!feof($fp)) {
//修改第二行数据
if ($i == 2) {
fseek($fp, 2, SEEK_CUR);
fwrite($fp, '#');
break;
}
fgets($fp);
$i++;
}
fclose($fp);
}

这里需要注意的是fgets获取到一行后,文件指针指向行尾(也就是下一行开头),所以fwrite操作的是fgets后的下一行开头,至于从该行的第几个字符开始写,可以使用fseek函数来移动文件指针。另外一个需要注意的是,这里fwrite写入是执行替换操作,而不是插入操作,所以指针后面的字符会一个个被替换掉。至于怎么插入我就没研究了。估计很困难。为了效率可能只能写入另外一个临时文件了,不知道有没有其他更好的方法。

  另外今天还看到了使用SPL进行操作的方法:
复制代码 代码如下:

$fp = new SplFileObject('d:/file.txt', 'r+');
//转到第二行, seek方法参数从0开始计数, 经我测试指针指向行尾了, 所以修改的是第三行
$fp->seek(1);
//获取当前行内容(第二行)
$line = $fp->current();
//下面是对第三行的操作
$fp->fseek(2, SEEK_CUR);
$fp->fwrite('#');

  SplFileObject提供的方法比基本的文件操作函数更丰富一些,包括采用key/value方法遍历文件行等。SPL应该是PHP5增加进去的吧,还有其他很多很有用的对象。包括数组、文件目录操作、异常处理、一些基本类型操作等,这些功能还在陆续增加,可以通过继承SPL扩展这些方法让我们处理底层的操作更方便。

相关文章

  • 总结的一些PHP开发中的tips(必看篇)

    总结的一些PHP开发中的tips(必看篇)

    下面小编就为大家带来一篇总结的一些PHP开发中的tips(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • PHP6 mysql连接方式说明

    PHP6 mysql连接方式说明

    PHP5.3 alpha和PHP6 alpha中,均采用了mysqlnd做为mysql数据库的默认驱动.
    2009-02-02
  • PHP生成和获取XML格式数据的方法

    PHP生成和获取XML格式数据的方法

    这篇文章主要介绍了PHP生成和获取XML格式数据的方法,结合实例形式较为详细的分析了PHP操作数据库生成XML及获取XML格式数据的相关技巧,需要的朋友可以参考下
    2016-03-03
  • 简单谈谈PHP中strlen 函数

    简单谈谈PHP中strlen 函数

    在PHP中,函数strlen()返回字符串的长度,strlen()函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为1
    2016-02-02
  • PHP中mb_convert_encoding与iconv函数的深入解析

    PHP中mb_convert_encoding与iconv函数的深入解析

    本篇文章是对PHP中mb_convert_encoding与iconv函数进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 如何修改和添加Apache的默认站点目录

    如何修改和添加Apache的默认站点目录

    本篇文章是对修改和添加Apache的默认站点目录方法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • php修改指定文件后缀的方法

    php修改指定文件后缀的方法

    这篇文章主要介绍了php修改指定文件后缀的方法,文中的函数foreachDir可实现文件目录的检测、读取、打开及文件后缀替换等功能,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • php文件后缀不强制为.php的实操方法

    php文件后缀不强制为.php的实操方法

    在本篇文章里小编给大家整理的是一篇关于php文件后缀不强制为.php的实操方法,有需要的朋友们参考下。
    2019-09-09
  • Thinkphp和onethink实现微信支付插件

    Thinkphp和onethink实现微信支付插件

    这篇文章主要为大家详细介绍了Thinkphp和onethink实现微信支付插件,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • php读取csv数据保存到数组的方法

    php读取csv数据保存到数组的方法

    这篇文章主要介绍了php读取csv数据保存到数组的方法,通过封装的类文件实现这一功能,是对csv文件操作的实用技巧,需要的朋友可以参考下
    2015-01-01

最新评论