Ecriture/lecture dans un fichier ".htpasswd" [Résolu]

Messages postés
186
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
19 décembre 2009
- - Dernière réponse : marcelolipi
Messages postés
91
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
25 juillet 2011
- 23 avril 2009 à 20:24
Bonjour,

Voila je voudrais pouvoir modifier a souhait un fichier ".htpasswd":

Le fichier ".htpasswd" se présente comme ca:

log1:password1
log2:password2
log3:password3
log4:password4

J'ai fait une fonction et j'en suis la:

    function updatehtpasswd($tab,$file){
        //tab est un tableau n elements. chaque element a en indice 0 le username et //en 1 le mot de passe non crypté.
        //file contient le chemin vers le fichier htpassw
        $handle= fopen('./secu/.htpasswd','w');
         
        if($handle){
                    $contenu="";
                   
                    foreach($tab as $user){
                        //On séparre le login et le mot de passe
                        for($i = 0; $i < count($user); $i++) {
                            $separe_log_pass = explode(":", $user[$i]);
                            $contenu .= $separe_log_pass[0].":".$separe_log_pass[1]."\n";
                        }
                    }
        //On ajoute l'utilisateur en cours
        $contenu .= $_POST["username"].":".crypt($_POST["password"])."\n";
        fwrite($handle,$contenu);
        echo $contenu ;
        fclose($handle);
        }
    }
   
    $chaine_secu = file("./secu/.htpasswd");
    //On découpe la chaine de caratére par \n
    $log_pass = explode("\n", $chaine_secu);
   
    updatehtpasswd($log_pass,$chaine_secu);

mais il y a une erreur car après exécution je récupère ça:

A:
AzRaEl:$1$sUQa2RxZ$2aoiIU0PoYnaIJj17lfhc0

Le nouveau compte c'est bien ajouté, mais les ancien....

A mon avis j'ai cafouillé a ce niveau la:

foreach($tab as $user){

                        //On séparre le login et le mot de passe

                        for($i = 0; $i < count($user); $i++) {

                            $separe_log_pass = explode(":", $user[$i]);

                            $contenu .= $separe_log_pass[0].":".$separe_log_pass[1]."\n";

                        }

Merci de votre aide

Az
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
186
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
19 décembre 2009
1
3
Merci
J'ai refait mon code comme ca:

function edit_htpasswd($file, $user, $password){
            //if (!file_exists($file) || !is_readable($file)) throw new exception('File not found');
            $rows = explode("\n",file_get_contents($file)."\n");
            $content = '';
            foreach($rows as $row)    {
                if (substr($row,0,strlen($user.':')) !== $user.':' ) 
                    $content .= $row."\n";
            }

            if ($password) 
                $content .= $user.':'.crypt($password)."\n";

            //return file_put_contents($file,$content);
            $f = fopen($file, 'w');
            fwrite($f, $content);
               fclose($f);
}

edit_htpasswd('./secu/.htpasswd',$_POST["username"],$_POST["password"]); 


Ca marche!

merci de ton aide 

Az

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de davidcian
Messages postés
232
Date d'inscription
jeudi 30 août 2007
Statut
Membre
Dernière intervention
31 juillet 2009
0
Merci
Non tu n'as pas cafouillé ou tu le dis ... Ce qui se passe c'est que tu ouvre ton fichier en mode écriture simple et donc tout ce que tu ajoutes s'ajoute par dessus ce qu'il y avait ... C'est à dire qu'a chaque ajout, tout est supprimé et seul ton enregistrements est ajouté ... Je crois qu'il faut ouvrir ton fichier de la sorte :

$handle=fopen('./secu/.htpasswd','w+');

ou

$handle=fopen('./secu/.htpasswd','a');

Je sais plus trop ... de mémoire les deux fonctionnes ... sinon aucun ne fonctionne tu doit dabord ouvrir ton fichier en lecture ... récupérer les infos et les ajouter par la suite en meme temps que ton nouvel enregistrements ...
Commenter la réponse de cs_mike1310
Messages postés
91
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
25 juillet 2011
0
Merci
cool


marcelolipi javascript:Insert_Emoticon('/imgs2/smile_cool.gif');
Commenter la réponse de marcelolipi