我的代码是:
<?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
答案 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);