Dateiänderung bei Mehrfachzugriff
Hallo,
ich wollte mal eure Meinung zu meiner Überlegung hören. Ich habe dank
eurer Hilfe ein PHP Script, welches die htpasswd Datei ändert. Wie sieht
es nun aus, wenn mehrere User gleichzeitig ihr Passwort ändern? Kann man
die Datei irgendwie für einen kurzen Augenblick sperren oder wie würdet
ihr das lösen?
--
MfG
Stefan Becker
Re: Dateiänderung bei Mehrfachzugriff
Stefan Becker schrieb:
> [...] Datei [...] sperren [...]
Du suchst flock().
Gruß. Claus
Re: Dateiänderungbei Mehrfachzugriff
Stefan Becker <spam [at] stefanshome.de> wrote:
> ich wollte mal eure Meinung zu meiner Überlegung hören. Ich habe dank
> eurer Hilfe ein PHP Script, welches die htpasswd Datei ändert. Wie sieht
> es nun aus, wenn mehrere User gleichzeitig ihr Passwort ändern? Kann man
> die Datei irgendwie für einen kurzen Augenblick sperren oder wie würdet
> ihr das lösen?
Ich würde die Arbeit dem Tool htpasswd selbst überlassen. Das hat
dafür Sorge zu tragen dass nicht mehrmals gleichzeitig schreibend
auf die selbe Datei zugegriffen wird.
Leider erwähnt die Anleitung nichts dazu. Müsste man ggf. in der
Server-Newsgroup oder direkt bei den Apache-Leuten nachfragen.
--
Web (en): http://www.no-spoon.de/ -*- Web (de): http://www.frell.de/
Re: Dateiänderung bei Mehrfachzugriff
"Claus Reibenstein" <4spammersonly [at] web.de> schrieb im Newsbeitrag
news:5m2ihsFb6kp3U1 [at] mid.individual.net...
>
> Du suchst flock().
Ok, laut php.net sollte es so doch gehen:
[..]
$handle = fopen($ausgangsDatei,"wb");
//Sperren der Datei für weitere Zugriffe
flock($handle,LOCK_EX);
//Schreiben der Datei
fwrite($handle,$NeuePasswortDatei);
fclose($handle);
//Entsperren der Datei
flock($handle,LOCK_UN);
[..]
Aber leider kommt
Warning: flock(): 3 is not a valid stream resource in
/intern/passwortAenderung.php on line 67
Aber was ist daran falsch?
Stefan
Re: Dateiänderung bei Mehrfachzugriff
"Stefan Scholl" <stesch [at] no-spoon.de> schrieb im Newsbeitrag
news:0T4eks8cIs16Nv8%stesch [at] parsec.no-spoon.de...
> Ich würde die Arbeit dem Tool htpasswd selbst überlassen. Das hat
> dafür Sorge zu tragen dass nicht mehrmals gleichzeitig schreibend
> auf die selbe Datei zugegriffen wird.
>
Das Tool htpasswd wird ja nicht verwendet...
Stefan
Re: Dateiänderungbei Mehrfachzugriff
Stefan Becker wrote:
Hallo,
> [..]
> $handle =3D fopen($ausgangsDatei,"wb");
> //Sperren der Datei für weitere Zugriffe
> flock($handle,LOCK_EX);
> Aber leider kommt
> Warning: flock(): 3 is not a valid stream resource in
> /intern/passwortAenderung.php on line 67
var_dump($handle);
Eigentlich müsste davor dann auch noch eine Fehlermeldung
kommen, dass die Datei $ausgangsDatei nicht geöffnet
werden konnte.
Theoretisch könnte es auch sein, dass das Dateisystem
flock() nicht unterstützt und sich das so bemerkbar macht.
BTW Ist $ausgangsDatei die htpasswd-Datei, die dann die
Passwörter enthält? Da kann ja dann nicht nur das
eigene Skript, sondern auch der Server ständig auf
die dann beim Schreiben teilweise unvollständige
htpasswd-Datei zugreifen, falls er dabei kein flock()
benutzt. Per rename(), das als atomare Dateioperation gilt,
lässt sich das vermeiden.
fopen('htpasswd_new', 'wb');
flock();
fwrite();
rename('htpasswd_new', 'htpasswd');
flock();
tschuess
[|8:)
Re: Dateiänderung bei Mehrfachzugriff
Stefan Becker schrieb (Einleitungsroman fachgerecht gekürzt):
> Ok, laut php.net sollte es so doch gehen:
>
> [..]
> $handle = fopen($ausgangsDatei,"wb");
> //Sperren der Datei für weitere Zugriffe
> flock($handle,LOCK_EX);
Du hast die "Notes" nicht gelesen. Dort ist genau Dein Fall beschrieben.
Dort steht auch, warum es so nicht geht.
> fclose($handle);
>
> //Entsperren der Datei
> flock($handle,LOCK_UN);
Du kannst eine Datei nicht entsperren, nachdem Du sie bereits
geschlossen hast (und brauchst das auch gar nicht mehr zu tun, weil die
Sperre beim Schließen sowieso aufgehoben wird).
Gruß. Claus
Re: Dateiänderung bei Mehrfachzugriff
"Sven Drieling" <sd [at] sven-drieling.de> schrieb im Newsbeitrag
news:20070928151451.122B.0.NOFFLE [at] news1.sven-drieling.de...
Stefan Becker wrote:
Ich habe mir mal deinen Tipp angesehen, aber rename macht jetzt einen
komischen Fehler:
$handle = fopen($tmp,"wb");
//Sperren der Datei für weitere Zugriffe
//flock($handle,LOCK_EX);
//Schreiben der Datei
fwrite($handle,$NeuePasswortDatei);
fclose($handle);
rename($ausgangsDatei, $tmp);
Warning: rename(/.htpasswd,/.htpasswd_tmp): Permission denied in
/passwortAenderung.php on line 67
Ich habe beide Dateien mit 777 Rechte ausgestattet.
Stefan
Re: Dateiänderung bei Mehrfachzugriff
Hallo!
"Stefan Becker" <spam [at] stefanshome.de> schrieb im Newsbeitrag
news:fdjacg$o5s$01$1 [at] news.t-online.com...
>
> "Sven Drieling" <sd [at] sven-drieling.de> schrieb im Newsbeitrag
> news:20070928151451.122B.0.NOFFLE [at] news1.sven-drieling.de...
> Stefan Becker wrote:
>
> Ich habe mir mal deinen Tipp angesehen, aber rename macht jetzt einen
> komischen Fehler:
>
> $handle = fopen($tmp,"wb");
> //Sperren der Datei für weitere Zugriffe
> //flock($handle,LOCK_EX);
>
> //Schreiben der Datei
> fwrite($handle,$NeuePasswortDatei);
> fclose($handle);
>
> rename($ausgangsDatei, $tmp);
>
> Warning: rename(/.htpasswd,/.htpasswd_tmp): Permission denied in
> /passwortAenderung.php on line 67
>
> Ich habe beide Dateien mit 777 Rechte ausgestattet.
Was hat das eine mit dem anderen zu tun?
Olaf
Re: Dateiänderung bei Mehrfachzugriff
"Olaf Schinkel" <trash [at] schinkel.tv> schrieb im Newsbeitrag
news:46fd5243$0$7701$9b4e6d93 [at] newsspool2.arcor-online.net...
> Ich habe beide Dateien mit 777 Rechte ausgestattet.
> Was hat das eine mit dem anderen zu tun?
>
Ich weiß es nicht, aber ich weiß sonst nichts mit Fehlermeldung
anzufangen.
Stefan
Re: Dateiänderung bei Mehrfachzugriff
Stefan Becker wrote:
> Warning: rename(/.htpasswd,/.htpasswd_tmp):
Dann mußt Dein PHP ja mit Root-Rechten laufen! Oder kann Dein PHP etwas
auf der kompletten Partition rumpfuschen?
Nur zum Verständnis falls es Dir noch nicht auf gefallen ist:
/.htpasswd liegt im Root des Server-OS! Ich nehme allerdings an das Du
Dich lieber auf Document-Root des Webservers beziehen willst.
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: Dateiänderung bei Mehrfachzugriff
"Ulf Kadner" <dr_logic [at] gmx.net> schrieb im Newsbeitrag
news:fdjkti$35c$02$1 [at] news.t-online.com...
>
> Dann mußt Dein PHP ja mit Root-Rechten laufen! Oder kann Dein PHP
> etwas auf der kompletten Partition rumpfuschen?
Nein PHP hat keinen Zugriff auf die gesamte Partition, das habe ich in
openbasedir schon eingestellt. Aber woran kann es nun liegen? Auf die
Dateien kann er ja auch schreiben, denn der Fehler taucht nur mit der
rename Fkt. auf.
Stefan
Re: Dateiänderungbei Mehrfachzugriff
Stefan Becker wrote:
Hallo,
> "Sven Drieling" <sd [at] sven-drieling.de> schrieb im Newsbeitrag
> Ich habe mir mal deinen Tipp angesehen, aber rename macht jetzt einen=
> komischen Fehler:
> rename($ausgangsDatei, $tmp);
>
> Warning: rename(/.htpasswd,/.htpasswd_tmp): Permission denied in
> /passwortAenderung.php on line 67
>
> Ich habe beide Dateien mit 777 Rechte ausgestattet.
Das Verzeichnis, in dem sich die Dateien befinden, muss auch
passende Schreibrechte haben.
13.7. Unix: Welche Zugriffsrechte brauche ich, um eine Datei anzulegen=
?
http://www.php-faq.de/q/q-datei-rechte.html
Schreiben und Unbenennen von Dateien kann man auch per
FTP durchführen. Etwa mit den FTP-Funktionen oder ab PHP 5
auch direkt über rename('ftp://....', ...);
Auf einen Shared-Host kann man ein chmod() via FTP auch
nutzen, um nur kurzfristig die Rechte hochzusetzen, das
verringert ein wenig die Gefahr.
Oder man umgeht die Dateisystemproblematik auf Shared-Hosts
mit Datenbanken: mod_auth_db, mod_auth_dbm.
tschuess
[|8:)
Re: Dateiänderungbei Mehrfachzugriff
Sven Drieling wrote:
> Oder man umgeht die Dateisystemproblematik auf Shared-Hosts
> mit Datenbanken: mod_auth_db, mod_auth_dbm
Oder falls auch eine CGI-Version von PHP bereitsteht, dann
mal jene probieren. Die läuft mit etwas Glück unter den
gleichen User wie der eigene FTP-Zugang.
tschuess
[|8:)