Я попытался найти решение, но не могу найти окончательного решения.
В принципе, у меня есть 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)));
Конечно, существует множество способов сделать это!