php 替换某一行,如何使用php替换文本文件中的特定行?

小编典典

您可以在较小的文件上使用一种方法,该文件可以两次装入您的内存:

$data = file('myfile'); // reads an array of lines

function replace_a_line($data) {

if (stristr($data, 'certain word')) {

return "replaement line!\n";

}

return $data;

}

$data = array_map('replace_a_line',$data);

file_put_contents('myfile', implode('', $data));

快速说明,PHP> 5.3.0支持lambda函数,因此您可以删除命名的函数声明并将映射缩短为:

$data = array_map(function($data) {

return stristr($data,'certain word') ? "replacement line\n" : $data;

}, $data);

从理论上讲,您可以使它成为单个(很难理解)的php语句:

file_put_contents('myfile', implode('',

array_map(function($data) {

return stristr($data,'certain word') ? "replacement line\n" : $data;

}, file('myfile'))

));

您应该对较大的文件使用另一种(较少占用内存的方法):

$reading = fopen('myfile', 'r');

$writing = fopen('myfile.tmp', 'w');

$replaced = false;

while (!feof($reading)) {

$line = fgets($reading);

if (stristr($line,'certain word')) {

$line = "replacement line!\n";

$replaced = true;

}

fputs($writing, $line);

}

fclose($reading); fclose($writing);

// might as well not overwrite the file if we didn't replace anything

if ($replaced)

{

rename('myfile.tmp', 'myfile');

} else {

unlink('myfile.tmp');

}

2020-05-26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值