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

insert text after specified string using php

我想使用 PHP 在指定字符串后向文件添加文本。

比如我想在#redundant LDAP {字符串

后面加上'ldaps'这个词

我使用这段代码没有结果:

$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); 

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

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

除此之外,您可能还想将 trim 添加到您的比较中,以避免出现空格和制表符问题。

$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); 
$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);