Ecriture/lecture dans un fichier ".htpasswd"

Résolu
davidcian Messages postés 186 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 19 décembre 2009 - 15 mars 2009 à 11:34
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

3 réponses

davidcian Messages postés 186 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 19 décembre 2009 1
16 mars 2009 à 12:46
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
3
cs_mike1310 Messages postés 232 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 31 juillet 2009
16 mars 2009 à 12:18
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 ...
0
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
cool


marcelolipi javascript:Insert_Emoticon('/imgs2/smile_cool.gif');
0
Rejoignez-nous