8791 sujets

Développement web côté serveur, CMS

Bonjour,


Je voudrais savoir si c'est possible de pouvoir, par un formulaire simple, de changer le mot de passe crypté (de la personne qui envoie le mot de passe) directement dans le fichier htpasswd.

Je me suis dit c'est facile il suffit d'ouvrir le fichier d'écrire dedans et de le modifier et voilà...
Mais ce que je n'ai pas pensé, c'est pour modifier juste le mot de passe au niveau d'un pseudo donné... je ne vois pas comment manipuler le fichier pour faire ça oO.

Par exemple j'ai :


pseudo1:motdepassecrypté
pseudo2:motdepassecrypté
pseudo3:motdepassecrypté
pseudo4:motdepassecrypté

Je voudrais juste modifier le mot de passe du pseudo3... en gardant le reste...
Ce que j'arrive à faire c'est de rajouter une ligne par conte...
Modifié par Crousti2 (07 Sep 2012 - 16:25)
Cette fonction c'est pour remplacer non une fraction de chaine par une autre non ? Je ne vois pas comment je peux l'utiliser pour ce que je voudrais faire... ^^

Un p'tit peu d'explication svp ? Smiley rolleyes
Il suffit de charger le fichier en mémoire en tant que chaîne de caractère (par exemple avec file_get_contents()), de faire ton opération, et de réécrire le fichier.
ça pose problème sur les gros fichiers à cause de la consommation de mémoire, mais je doute que ton htpasswd fasse 30 Mo Smiley cligne
D'accord, mais dans ce cas là je n'ai pas besoin de preg_replace() alors ?

Puis les pseudo et mot de passe risque d'être en ligne du coups non ?

pseudo:motdepassepseudo2:motdepassepseudo3:motdepasse
Crousti2 a écrit :
D'accord, mais dans ce cas là je n'ai pas besoin de preg_replace() alors ?

Justement, après avoir chargé le fichier dans une variable de type chaine de caractères tu pourras utiliser preg_replace() sur la chaine en question. Par contre tu as raison sur le fait que tu n'as pas besoin de preg_replace(), pour un remplacement simple la fonction str_replace() suffit et sera plus performante.


Crousti2 a écrit :
Puis les pseudo et mot de passe risque d'être en ligne du coups non ?
pseudo:motdepassepseudo2:motdepassepseudo3:motdepasse

Non non ne t'inquiètes pas Smiley langue
D'après toi pourquoi un fichier n'apparait pas tout d'une ligne quand tu l'ouvre dans un éditeur de texte ? Simplement parceque les retours à la ligne sont enregistré dans le fichier, et ils se retrouvent dans la chaine de caractère sous la forme "\n" (ou "\r\n" suivant les systèmes d'exploitation). Voir l'article wikipedia, court et instructif.
Si tu fais $str = file_get_contents("htpasswd") tu te retrouveras avec une chaine comme ça dans str :
pseudo:motdepasse\npseudo2:motdepasse\npseudo3:motdepasse

ce qui est interprété comme ça par un éditeur de texte :
pseudo:motdepasse
pseudo2:motdepasse
pseudo3:motdepasse


Un dernier conseil quand tu effectueras le remplacement si tu retiens la technique du str_replace ou preg_replace : Fais bien une recherche sur pseudo:motdepasse et pas juste sur motdepasse, au cas où deux utilisateurs auraient le même mot de passe Smiley cligne
Modifié par BlueScreenJunky (07 Sep 2012 - 23:03)
Bonjour,


Ca ne semble pas fonctionner avec avec fgets ou file get content... j'ai toujours une série d'espace en tout début de fichier, affiché sous notepad en "NULL NULL NULL....."