htpassword und Editierung
W3asel
- php
Moin Leute,
ich hab folgende Idee: Die Datei '.htpasswd' auslesen in Arrays, also jede Zeile ein Array oder noch besser in jedes Array ein Benutzername der '.htpasswd' - leider weiß ich nicht wie des geht, deshalb bin ich bei der Variante mit dem jede Zeile ein Array geblieben! Man soll per Checkbox die User anwählen können und damit löschen.
Also eigentlich ganz einfach, auf den CHMOD hab ich dabei schon geachtet, das Script sieht zur Zeit so aus:
<?php
echo "<html>";
echo "<body>";
echo "<form name="activate" method="post" action="config.php">";
$anz='20';
$file = ".htpasswd";
if (file_exists("$file"))
{
## Variablen für die while-Schleife
$i='0';
## Öffnen der Datei
$htpasswd = fopen($file, "r");
## Anzeigen des Inhalts
while($anz>=0)
{
echo "<input name="loeschen";
echo $i;
echo ""type="checkbox" value="">";
echo " - ";
$array['text']['$i'] = fgets($htpasswd);
echo $array['text']['$i'];
echo "<br>";
$i++;
$anz--;
}
fclose ($htpasswd);
echo "<br>";
echo "<input type="submit" name="Submit" value="Loeschen">";
echo "</form>";
echo "</body>";
echo "</html>";
?>
Er zeigt mir dabei aber schon unerwartetes Ende an, kein Plan wo dort der Fehler liegt.
Die config.php schaut dann dazu so aus:
<?php
$anz='0';
$i='20';
$htpasswd = fopen($file, "r+");
while ($i>=$anz)
{
if ($anz>'1')
{
##In Datei schreiben (anhängend)
fclose ($htpasswd);
$htpasswd = fopen($file, "a");
}
else
{
}
## Hochzählen + Checkboxen einlesen
$anz++;
$loeschen = $HTTP_POST_VARS["loeschen$anz"];
## Wenn Checkbox leer
if ($loeschen == "")
{
## Eintragen der nicht geändertden Daten
$array1 = $array['text']['$anz'];
fputs ($htpasswd, "$array1\n");
fclose ($htpasswd);
}
## Wenn Checkbox an:
else
{
## Eintrag verwerfen
fputs ($htpasswd, "");
fclose ($htpasswd);
}
}
?>
Nach meiner Meinung dürfte das so Funktionieren, aber irgendwie auch wieder net, kann mir mal wer unter die Arme greifen - ich hänge zur Zeit.
Okay, im ersten Dok hab ich die If-Anweisung net geschlossen, die Formularseite funzt somit, aber die config.php halt net - da meckert er immernoch an dem fput und fclose herum
Hi W3asel,
Okay, im ersten Dok hab ich die If-Anweisung net geschlossen, die Formularseite funzt somit, aber die config.php halt net - da meckert er immernoch an dem fput und fclose herum
Du machst die Datei auf, dann machst du eine Schleife auf, mit einer IF-Anweisung drin, die die Dateiu wieder schließt und anders öffnet. Puh, wenn es da nicht zu Problemen kommt.
Mach die Datei einmal auf und einmal zu, nicht in einer Schleife mehrfach. ich weiß nicht, ob das das Problem ist, aber ich schätze, dass zu dem Zeitpunkt, wo du fputs machst, schon keine Datei mehr offen ist.
ciao
romy
Okay hab mir sowas schon gedacht, dass das einfach zu viel wird, hier die abgeänderte Form von der config.php: Das Attribut W für fopen habe ich genommen, da die .htpasswd völlig neu geschrieben wird, die Were dafür liegen ja alle in den Array vor: $array['text']['0']....
<?php
$anz='0';
$i='20';
$htpasswd = fopen($file, "w");
while ($i>=$anz)
{
$loeschen = $HTTP_POST_VARS["loeschen$anz"];
## Wenn Checkbox leer
if ($loeschen == "")
{
## Eintragen der nicht geändertden Daten
$array1 = $array['text']['$anz'];
fputs ($htpasswd, "$array1\n");
}
## Wenn Checkbox an:
else
{
}
$anz++;
$i--;
}
fclose ($htpasswd);
?>
Zur Zeit passt PHP aber folgende Zeile nicht:
$array1 = $array['text']['$anz'];
fputs ($htpasswd, "$array1\n");
Schreib ich es so, funzt es auch net:
fputs ($htpasswd, "$array['text']['$anz']\n");
Hi W3asel,
<?php
$anz='0';
$i='20';In Datei schreiben (erstmals)
$htpasswd = fopen($file, "w");
while ($i>=$anz)
{
$loeschen = $HTTP_POST_VARS["loeschen$anz"];
möchtest du hier auf loeschen1, loeschen2 etc. referenzieren? Wenn ja benutze die richtige Syntax zu variablen Variablen.
${"löschen".$anz} sollte stimmen.
Zur Zeit passt PHP aber folgende Zeile nicht:
$array1 = $array['text']['$anz'];
fputs ($htpasswd, "$array1\n");
Mach mal ein echo $array['text']['$anz'];
Was steht da drin?
Außerdem musst du keine "" mehr um eine Variable schreiben, es reicht auch: fputs ($htpasswd, $array1."\n");
Ob du es darfst weiß ich gerade nicht, ist also nur ein Versuch.
ciao
romy
Okay, neue Config, neues Glück -- hat bis jetzt noch keine Fehler ausgespuckt, aber man sieht vielleicht auch warum: er ließt nun die beiden Counter-Zahlen $anz und $i ein, das macht er auch wunderbar.
0:20 - 1:19 - 2:18 - 3:17 .. ist aber nicht Sinn der Sache oder?
Naja und der Echo im letzten Schleifenteil Spuckt nur: 20:0 - 20:0 - 20:0 Fertig! aus!
##Ich lese nochmal alles ein, falls es durch das Formular
##nicht alles übernimmt!
<?php
$file = ".htpasswd";
$anz='20';
$i='0';
if (file_exists("$file"))
{
$htpasswd = fopen($file, "r");
while($anz>=0)
{
$array['text']['$i'] = fgets($htpasswd);
$i++;
$anz--;
}
fclose ($htpasswd);
}
$anz='20';
$i='0';
$htpasswd = fopen($file, "w");
while ($anz>=0)
{
$loeschen = $HTTP_POST_VARS["loeschen".$i];
echo $loeschen;
## Wenn Checkbox leer
if ($loeschen == "")
{
## Eintragen der nicht geänderten Daten
fputs ($htpasswd, "$anz:$i\n");
echo $array['text']['$i'];
echo " eingelesen!\n";
}
## Wenn Checkbox an:
else
{
echo $array['text']['$i'];
echo " geloescht!\n";
}
$anz--;
$i++;
}
fclose ($htpasswd);
echo "Fertig!"
?>
Ne Idee, warum fputs mit fputs ($htpasswd, "$anz:$i\n"); arbeitet aber nicht mit fputs ($htpasswd, $blah"\n"); ???
Hallo
Ne Idee, warum fputs mit fputs ($htpasswd, "$anz:$i\n"); arbeitet aber nicht mit fputs ($htpasswd, $blah"\n"); ???
Weil bei letzterer Schreibweise zwischen Variable und Textteil ein Punkt gehört ($blah."\n").
Tschö, Auge
Hi W3asel,
echo "<html>";
echo "<body>";
echo "<form name="activate" method="post" action="config.php">";Wieviele User sollen eingelesen werden?
$anz='20';
Zu beschreibene Datei / Zu lesene Datei
$file = ".htpasswd";
Wenn htpasswd existiert
if (file_exists("$file"))
{Variablen für die while-Schleife
$i='0';
Öffnen der Datei
$htpasswd = fopen($file, "r");
Anzeigen des Inhalts
while($anz>=0)
{
echo "<input name="loeschen";
echo $i;
echo ""type="checkbox" value="">";
echo " - ";$array['text']['$i'] = fgets($htpasswd);
echo $array['text']['$i'];
echo "<br>";
$i++;
$anz--;
}
fclose ($htpasswd);echo "<br>";
echo "<input type="submit" name="Submit" value="Loeschen">";
echo "</form>";
echo "</body>";
echo "</html>";
?>
Hier fehlt die schließende Klammer zum IF-Zweig!
ciao
romy
Hallo,
es gibt eine PEAR Klasse die .passwd bearbeiten kann
File_Passwd
es gibt bei dieser Klasse eine Methode, womit man alle User auflisten kann
listUser
folgender Codeschnipsel sollte alle Benutzer aus einer .htpasswd auslesen (ungetestet)
require_once ('File/Passwd/Authbasic.php');
$file = new File_Passwd_Authbasic('.htpasswd');
$file->load();
$array = $file->listUser();
mfg
Twilo