PHP Изменить одну строку в текстовом файле

Я попытался найти решение, но не могу найти окончательного решения.

В принципе, у меня есть txt-файл, в котором перечислены имена пользователей и пароли. Я хочу иметь возможность изменять пароль определенного пользователя.

Содержимое файла users.txt:

user1,pass1 user2,pass2 user3,pass3 

Я пробовал следующий код php:

  // $username = look for this user (no help required) // $userpwd = new password to be set $myFile = "./users.txt"; $fh = fopen($myFile,'r+'); while(!feof($fh)) { $users = explode(',',fgets($fh)); if ($users[0] == $username) { $users[1]=$userpwd; fwrite($fh,"$users[0],$users[1]"); } } fclose($fh); 

Это должно сработать! 🙂

 $file = "./users.txt"; $fh = fopen($file,'r+'); // string to put username and passwords $users = ''; while(!feof($fh)) { $user = explode(',',fgets($fh)); // take-off old "\r\n" $username = trim($user[0]); $password = trim($user[1]); // check for empty indexes if (!empty($username) AND !empty($password)) { if ($username == 'mahdi') { $password = 'okay'; } $users .= $username . ',' . $password; $users .= "\r\n"; } } // using file_put_contents() instead of fwrite() file_put_contents('./users.txt', $users); fclose($fh); 

Я думаю, когда вы получите этот файл, используйте file_get_contents после этого, используйте preg_replace для конкретного имени пользователя

Я сделал это в прошлом, как здесь

  $str = ""; $reorder_file = FILE_PATH; $filecheck = isFileExists($reorder_file); if($filecheck != "") { $reorder_file = $filecheck; } else { errorLog("$reorder_file :".FILE_NOT_FOUND); $error = true; $reorder_file = ""; } if($reorder_file!= "") { $wishlistbuttonhtml="YOUR PASSWORD WHICH YOU WANT TO REPLACE" $somecontent = $wishlistbuttonhtml; $Handle = fopen($reorder_file, 'c+'); $bodytag = file_get_contents($reorder_file); $str=$bodytag; $pattern = '/(YOUR_REGEX_WILL_GO_HERE_FOR_REPLACING_PWD)/i'; $replacement = $somecontent; $content = preg_replace($pattern, $replacement, $str,-1, $count); fwrite($Handle, $content); fclose($Handle); } 

Надеюсь это поможет….

Правильный способ сделать это – использовать базу данных. Базы данных могут делать произвольный доступ легко, делая это с текстовыми файлами.

Если вы не можете переключиться на базу данных по какой-либо причине, и вы не ожидаете иметь более тысячи пользователей для вашей системы, тогда было бы намного проще просто прочитать весь файл, преобразовать его в PHP структуру данных, внесите необходимые изменения, преобразуйте их обратно в текст и перезапишите исходный файл.

В этом случае это означает, что файл () будет загружать текстовый файл в массив с каждым элементом, являющимся именем пользователя и паролем в виде строки, взорвать все элементы массива в запятой, чтобы получить имя пользователя и пароль отдельно, внести изменения вам нужно сделать, а затем записать измененные данные на диск.

Вы также можете найти fgetcsv (), полезную для чтения данных. Если вы используете SplFileObject и имеете последнюю версию PHP, то fputcsv () также может быть доступен для записи данных.

Однако просто использование базы данных – гораздо лучшее решение. Правильный инструмент для работы.

Если вы находитесь в системе * nix, вы можете использовать sed ; Я нахожу его более аккуратным, чем игра с файлами и т. Д.

 exec("sed -i '/^$username,.\+\$/$username,$userpwd/g' ./users.txt 2>&1", $output, $return); 

Если нет, я бы согласился с GordonM и проанализировал файл в структуре данных PHP, манипулировал им, а затем вернул его:

 $data = file_get_contents('./users.txt'); $users = array_map(function($line) { return explode(',', $line); }, explode("\n", $data)); foreach ( $users as $i => $user ) { if ( $user[0] == $username ) { $user[1] = $userpwd; $users[$i] = $user; } } file_put_contents('./users.txt', implode("\n", array_map(function($line) { return implode(',', $line); }, $users))); 

Конечно, существует множество способов сделать это!