PHP 读取和修改大文件的某行内容的代码
2015-01-24信息快讯网
最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,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扩展这些方法让我们处理底层的操作更方便。
rrmdir php中递归删除目录及目录下的文件
PHP与C#分别格式化文件大小的代码
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
php中通过Ajax如何实现异步文件上传的代码实例
PHP 遍历文件实现代码
兼容性最强的PHP生成缩略图的函数代码(修改版)
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
PHP验证码类代码( 最新修改,完全定制化! )
批量修改RAR文件注释的php代码
zen cart新进商品的随机排序修改方法
php实现jQuery扩展函数
PHP 批量删除数据的方法分析
php 文件上传系统手记
Ha0k 0.3 PHP 网页木马修改版
火车头discuz6.1 完美采集的php接口文件
frename PHP 灵活文件命名函数 frename
用PHP读取flv文件的播放时间长度
php download.php实现代码 跳转到下载文件(response.redirect)
改变Apache端口等配置修改方法
修改Zend引擎实现PHP源码加密的原理及实践
MySQL修改密码方法总结
修改php.ini实现Mysql导入数据库文件最大限制的修改方法