kostenloser Webspace werbefrei: lima-city


PHP: txt Datei -> bestimmte Zeile suchen -> ändern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    thoba

    Co-Admin Kostenloser Webspace von thoba

    thoba hat kostenlosen Webspace.

    Hallo,

    irgendwie komm ich mit folgenden Problem nicht weiter:

    Ich habe einen bestimmten Bereich mit .htaccess i.V.m. einer Passwortdatei (.htpasswd) gesch?tzt. In diesen Bereich soll ein bestimmter Personenkreis Zugang haben, jedoch nicht alle mit ein und demselben Benutzernamen und Kennwort, sondern f?r jeden ein individueller Zugang. Ich m?chte nun also, dass jeder sein Kennwort (nur Kennwort) mithilfe eines PHP-Scripts ?ndern kann. D.h. in der .htpasswd Datei steht folgendes:

    User:crypt_Passwort
    User2:crypt_Passwort
    Hans:crpyt_PW
    Willi:crypt_PW
    User5:crypt_PW
    usw...

    Nun br?ucht ich folgenden Ablauf, wenn sich z.B. User "Hans" im Script anmeldet:

    - .htpasswd ?ffnen
    - Datei auslesen
    - In der Zeile wo am Anfang "Hans" steht, dass von Hans eingegebene Kennwort ?ndern
    - Datei zur?ckschreiben (ink. neues Hans Kennwort)

    Der Benutzername soll nicht ?nderbar sein. Alle bestehenden Benutzernamen und Kennw?rter sollen ebenfalls nicht ver?ndert werden. Der Aufbau der Datei soll gleich bleiben, da sie sonst ja nicht funktionieren w?rde. Ich meine damit also, dass wieder jeder User+Passwort in einer Zeile steht. Ob der User "Hans" nach der ?nderung des Passwortes nun ganz am Ende der Datei stehen w?rde, w?re mir egal.

    Die Frage ist nun: Wie suche ich in der Datei nach dem User "Hans" und ?ndere nur seine Zeile der Datei ab?

    F?r eure M?he bedanke ich mich schoneinmal im Voraus!


    Beitrag ge?ndert am 23.07.2006 10:48 von thoba
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Naja.. was mir jetzt auf Anhieb einf?llt sit folgendes:

    <form method="post">
    <input name="name" value="username"/><br/>
    <input type="password" name="password" value="Pass"/><br/>
    <input name="submit" type="submit" value="?ndern">
    </form>
    
    <?php
    $datei = fopen("passwd.htpasswd");
    $file = fgets($datei, strlen($datei));
    $file = preg_replace("'" . $_POST['username'] . ":(.*?)\n'i", "" . $_POST['username'] . ":" . $_POST['password' . "", $file);
    rewind($datei);
    fwrite($datei, $file);
    fclose($datei);
    ?>




    ungetestet und wahrscheinlich nciht funktionst?chtig, aber es solet ein Anfang sein. ^^

    Beitrag ge?ndert am 23.07.2006 13:29 von adrians

    Beitrag ge?ndert am 23.07.2006 13:29 von adrians
  4. Hi,

    einfacher ist es wahrscheinlich, wenn man einfach jede einzelne Zeile durchsucht.

    Bsp:
    // der Username, bei dem das Passwort ge?ndert werden soll
    $username = "Hans";
    // Das neue (verschl?sselte) Passwort
    $password = "v76c8end9z8z";
    
    $lines = file(".htpasswd");
    foreach ($lines as $key => $line) {
      list($un,$pw) = explode(":",$line);
      if ($un == $username) {
        $lines[$key] = "$un:$password";
      } else {
        $lines[$key] = trim($line);
      }
    }
    
    $fp = fopen(".htpasswd",'w');
    fputs($fp,implode("\n",$lines));
    fclose($fp);


    So, das sollte eigentlich funktionieren. Ich hoffe es ist ok.

    Eigentlich k?nnte man den ganzen Code auch vereinfachen:
    $username = "Hans";
    $password = "v76c8end9z8z";
    
    $lines = file(".htpasswd");
    foreach ($lines as $key => $line) {
      list($un,$pw) = explode(":",$line);
      $lines[$key] = $un == $username ? "$un:$password" : trim($line);
    }
    
    $fp = fopen(".htpasswd",'w');
    fputs($fp,implode("\n",$lines));
    fclose($fp);


    Einfacher geht es glaube ich nicht ;).

    mfg,
    hr

    Beitrag ge?ndert am 23.07.2006 16:55 von heavyraptor
  5. Autor dieses Themas

    thoba

    Co-Admin Kostenloser Webspace von thoba

    thoba hat kostenlosen Webspace.

    Danke an euch beiden!

    Ich habe das Problem mittlerweile anders (und deutlich umst?ndlicher) gel?st.

    Ich habe jetzt die Datei einfach komplett neu schreiben lassen, mit werten aus einer Datenbank. D.h. Passwort wird in DB ge?ndert -> Datei wird mit ge?nderten Passwort mithilfe der DB kompett neu geschrieben.

    Eure Arbeit war aber trotzdem nicht umsonst. F?r die Zukunft wei? ich, wie ich es einfacher machen kann.

    Danke nochmal!
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!