PHP Modifier une seule ligne dans un fichier texte
J'ai essayé et cherché une solution, mais ne peut pas trouver de façon définitive.
En gros, j'ai un fichier txt qui répertorie les noms d'utilisateur et mots de passe. Je veux être en mesure de changer le mot de passe d'un utilisateur en particulier.
Contenu de users.txt fichier:
user1,pass1
user2,pass2
user3,pass3
J'ai essayé le code php suivant:
//$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);
- Le problème avec ta solution c'est que vous êtes la manipulation d'un texte (séquentiel) fichier comme un fichier binaire. Le fwrite vous utilisez ne fonctionnera pas ici.
- votre problème est un exemple de pourquoi vous ne devez pas utiliser une plate fichiers texte, mais une base de données
- Il y a aussi le problème de la synchronisation. Donc, vous devriez essayer d'utiliser
flock
. Ou, il pourrait facilement conduire certains utilisateurs de fou.
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner! 🙂
Je pense que quand vous obtenez ce fichier utiliser file_get_contents après que d'utiliser preg_replace pour le nom d'utilisateur
Je l'ai fait dans le passé quelque chose, comme ici
Espère que cela aide....
La bonne façon de le faire est d'utiliser une base de données à la place. Les bases de données peuvent faire l'accès aléatoire facilement, de le faire avec des fichiers de texte qui le sont moins.
Si vous ne pouvez pas passer à une base de données pour quelque raison que ce soit, et vous ne vous attendez pas à avoir plus d'un millier d'utilisateurs de votre système, alors il serait beaucoup plus simple de se contenter de lire l'ensemble du dossier dans les, de les convertir en PHP, structure de données, faire les changements que vous devez faire, de le convertir en arrière dans le texte et remplacer le fichier d'origine.
Dans ce cas, cela signifierait fichier() pour charger le fichier texte dans un tableau avec chaque élément d'un nom d'utilisateur et le mot de passe comme une chaîne de caractères, exploser tous les éléments du tableau à la virgule pour obtenir le nom d'utilisateur et le mot de passe séparément, faire les changements que vous devez faire, puis d'écrire les données modifiées sur le disque.
Vous pouvez également trouver des fgetcsv() utile pour la lecture des données. Si vous SplFileObject et de disposer d'une version récente de PHP alors fputcsv() peut également être disponible pour écrire les données de retour.
Cependant, juste en utilisant une base de données est une bien meilleure solution. Bon outil pour le travail.
Si vous êtes sur un *nix système vous pouvez utiliser
sed
; je trouve ça plus propre que de jouer avec les descripteurs de fichiers etc:Pas si je serai d'accord avec GordonM et analyser le fichier en PHP, structure de données, les manipuler, puis le remettre:
Il y a, bien sûr, un nombre infini de façons de le faire!