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

时间:2016-02-29 09:05:57

标签: php html

我有一个带有用户名和显示名的文件存储在其中:

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

当我输入数据并点击提交时,它会转到我的成功页面,但是它没有对正确的文件进行任何更改,我不确定如何判断我错过了什么

3 个答案:

答案 0 :(得分:3)

首先,您的比较显示单引号'中的变量,这意味着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;
    }
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用strpos

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