PHP: txt Datei -> bestimmte Zeile suchen -> ändern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anhauen
beitrag
benutzername
bestimmter personenkreis
datei
ebenfall
einzelne zeile
folgenden ablauf
fragen
gel
hans
individueller zugang
kennwort
mithilfe
pawort
rewind
script
stehen
username
zeile
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
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! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage