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

Signaler
Messages postés
186
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
19 décembre 2009
-
marcelolipi
Messages postés
91
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
25 juillet 2011
-
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

3 réponses

Messages postés
186
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
19 décembre 2009
1
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
Messages postés
232
Date d'inscription
jeudi 30 août 2007
Statut
Membre
Dernière intervention
31 juillet 2009

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 ...
Messages postés
91
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
25 juillet 2011

cool


marcelolipi javascript:Insert_Emoticon('/imgs2/smile_cool.gif');