PHP 使用替换文本文件中的字符串


PHP Replace string in text file using

我有一个文件,其中存储了用户名和显示名称,如下所示:

testname=displayname<br>
testname2=displayname2<br>
etc=etc<br>

此列表在相同的文件、相同的用户名和相同的显示名称上执行两次。我需要在列表中的两个区域替换它们(需要更换两次)

我正在尝试创建一个表单,用户可以在其中更改其显示名称。我试图从一个页面复制我的代码,在该页面中查找文件中他们帐户的密码,找到它并替换它,但它似乎不适用于此文件。

更改其名称的

表单很简单,它让他们输入其成员名称(因此我可以使用它在列表中找到他们的名字),然后使用他们输入的显示名称来更改其在文件中的显示名称。

表单页面代码:

<center>Change Display Name:<p>
<form action="http://example.com/xxx/displaynamesave.php" class="form" method="post">
<input "membername" name="membername" /><p><input "displayname" name="displayname" /><p><input name="Submit" type="submit" /></form></p>/center>

下面是我用于处理的 PHP 代码

<?
$fileurl = '/xxx/myfiles/sitename/xxx/memberfiletest';
$membername = $_POST['membername'];
$displayname = $_POST['displayname']; 
$file = file($fileurl, FILE_IGNORE_NEW_LINES); // Get file as array of lines
foreach ($file AS $n=>$line)
if (substr($line, 0, 20) === '$membername') // Line starts with 'membername'
    $file[$n] = '$membername = '.$displayname; // Replace displayname
file_put_contents($fileurl, implode("'n", $file)); // Put file back together
$success_page = 'http://example.com/thisplace/xxx/xxx/successredirector.html';
header('Location: '.$success_page);
?>

当我输入数据并点击提交时,它会进入我的成功页面,但是它不会在正确的文件中进行任何更改,我不确定如何判断我缺少的内容。

首先

,您的比较以单引号'显示变量,这意味着PHP不会解析它,实际上是将所有内容与$membername进行比较,而不是变量的值$membername。将比较更改为:

foreach ($file as $n => $line) {
    if (substr($line, 0, 20) === $membername) { // Line starts with 'membername'
        $file[$n] = $membername . ' = ' . $displayname; // Replace displayname
    }
}

其次,在文件内容的示例中,"用户名"部分的长度并不相同("testname","etc"),但您的比较是检查该行的前20个字符。如果格式确实是username=displayname,您可能会有更好的结果在=上拆分线条(当然,有几种方法可以做到这一点),并比较第一部分。一个例子是这样的:

foreach ($file as $n => $line) {
    $parts = explode('=', $line);
    if ($parts[0] == $membername) {
        $file[$n] = $membername . ' = ' . $displayname;
    }
}

使用 strpos

foreach ($file as $n => $line) {
    if (strpos($line, $membername) === 0) { // Line starts with 'membername'
        $file[$n] = $membername . ' = ' . $displayname; // Replace displayname
    }
}

您在'中使用变量。试试这个:

foreach ($file as $n => $line) {
    list($name, $dname) = explode('=', trim($line));
    if ($name === $membername) { // Line starts with 'membername'
        $file[$n] = $membername . ' = ' . $displayname; // Replace displayname
    }
}