簡體   English   中英

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
    }
}

其次,在文件內容的示例中,“用戶名”部分的長度不是全部相同(“測試名”,“等”),但是您的比較是針對該行的前20個字符進行的。 如果格式確實是username=displayname ,則在=上分割行(當然,有兩種方法可以做到),然后比較第一部分,您可能會得到更好的結果。 例如:

foreach ($file as $n => $line) {
    $parts = explode('=', $line);
    if ($parts[0] == $membername) {
        $file[$n] = $membername . ' = ' . $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
    }
}

使用strpos

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM