使用php在指定的字符串后插入文本

时间:2017-12-15 11:11:49

标签: php file-put-contents

我想使用PHP在指定的字符串之后将文本添加到文件中。

例如,我想添加' ldaps'在#redundant LDAP {字符串

之后

我使用此代码时没有结果:

$lines = array();
foreach(file("/etc/freeradius/sites-enabled/default") as $line) {
    if ("redundant LDAP {" === $line) {
        array_push($lines, 'ldaps');
    }
    array_push($lines, $line);
}
file_put_contents("/etc/freeradius/sites-enabled/default", $lines); 

这段代码唯一能做的就是将行放入数组,然后插入文件而不添加单词。

2 个答案:

答案 0 :(得分:1)

$lines = array();

foreach(file("/etc/freeradius/sites-enabled/default") as $line)) {
    // first switch these lines so you write the line and then add the new line after it

    array_push($lines, $line);

    // then test if the line contains so you dont miss a line
    // because there is a newline of something at the end of it
    if (strpos($line, "redundant LDAP {") !== FALSE) {
        array_push($lines, 'ldaps');
    }
}
file_put_contents("/etc/freeradius/sites-enabled/default", $lines); 

答案 1 :(得分:0)

目前,您只应修改file_put_contents代码,它应该有效。 file_put_contents期望和字符串,但你想传递一个数组。使用join,您可以将数组再次组合成一个字符串。

除此之外,您可能还需要在比较中添加修剪,以避免出现空格和标签问题。

$lines = array();
foreach(file("/etc/freeradius/sites-enabled/default") as $line) {
    // should be before the comparison, for the correct order
    $lines[] = $line;
    if ("redundant LDAP {" === trim($line)) {
        $lines[] = 'ldaps';
    }
}
$content = join("\n", $lines);
file_put_contents("/etc/freeradius/sites-enabled/default", $content);