如何将字符串添加到特定的文件行

时间:2014-05-09 12:16:36

标签: php

我的代码是:

<?php 

$data = file_get_contents('file.conf');
$rows = explode("\n", $data);
$rcount = count($rows); 
echo $rcount;
for ($l=0; $l<$rcount; $l++)
{
$rowss = $rows[$l];
if ($rowss == "[default]")
{
    file_put_contents($rowss, "\nhi", FILE_APPEND | LOCK_EX) or die("<br>oops");
}
}


?>

我的输出是:

52
oops

我的文件(file.conf)包含52行成功打印但无法在该文件上写入

我需要在“[default]”行

的末尾添加一些像“hi”这样的字符串

例如,我的文件是:

eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'
european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM



[default]

1234 => 4242,Example Mailbox,root@localhost
;4200 => 9855,Mark Spencer,markster@linux-    support.net,mypager@digium.com,attach=no|serveremail=myaddy@digium.com|tz=central|maxmsg=        10
;4300 => 3456,Ben Rigas,ben@american-computer.net
;4310 => -5432,Sales,sales@marko.net

2 个答案:

答案 0 :(得分:0)

你犯了两个错误:(1)file_put_contents的第一个参数必须是文件写入数据的路径,(2)FILE_APPEND最后插入数据 - 而不是而不是在文件的中间;所以你唯一能做的就是完全覆盖文件。

<?php    
$data = file_get_contents("file.conf");
$rows = explode("\n", $data);
$rcount = count($rows); 
echo $rcount;
$arr = array();
for($l = 0; $l < $rcount; $l++){
    $arr[] = $rows[$l];
    if($rows[$l] == "[default]"){
        $arr[] = "hi";
    }
}    
file_put_contents("file.conf", implode("\n", $arr), LOCK_EX) or die("<br/>oops");
?>

答案 1 :(得分:0)

另一种方法,使用file读取数组,使用array_walk遍历行。

<?php
$data = file("file.conf"); // read to array
echo count($data) . "\n";
array_walk($data, function(&$row, $key){
    if ($row == '[default']) {
        $row .= 'SPECIAL';
    }
}) 

file_put_contents("file.conf", implode("\n", $data), LOCK_EX) 
    or trigger_error('Could not save file', E_USER_ERROR);