[英]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.