| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

20-10-2011, 19:20
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
flock() Problem
Ich möchte, dass die Datei nur zum Schreiben gesperrt wird, aber gelesen werden kann, doch erhalte ich bei der 'test.php' sofort die Ausgabe 'fehler'.
lock.php
PHP-Code:
$fp = fopen( 'test.txt', 'w' ); flock( $fp, LOCK_EX ); fwrite( $fp, date("H:s") ); sleep( 5 ); flock( $fp, 3 ); fclose( $fp );
test.php (die während des Laufzeit von lock.php aufgerufen wird)
PHP-Code:
$fp = fopen( 'test.txt', 'r' ); if( ! $con = fgets( $fp ) ) echo 'fehler'; else echo $con; fclose( $fp );
|

20-10-2011, 19:44
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Wo prüfst du denn, in der zweiten php Datei, ob die Datei gelockt ist?
Wie kommst du auf die witzige Idee, dass die Daten ohne fflush() geschrieben werden?
|

20-10-2011, 19:56
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von einermeiner
Ich möchte, dass die Datei nur zum Schreiben gesperrt wird, aber gelesen werden kann, doch erhalte ich bei der 'test.php' sofort die Ausgabe 'fehler'.
|
Natürlich, weil das andere Script einen exklusiven Lock hält, und du im zweiten Script gar nicht erst mal höflich nach einem shared lock fragst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

20-10-2011, 20:28
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Nee, die Meldung kommt wegen dem fehlenden fflush().
|

21-10-2011, 15:17
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Ich glaube, ich verstehe da etwas nicht.
Zitat:
- Um eine verteilte, nur lesende Verriegelung zu erhalten, setzen Sie operation auf LOCK_SH (bzw. 1 vor PHP 4.0.1).
- Um eine exklusive, nur schreibende Verriegelung zu erhalten, setzen Sie operation auf LOCK_EX (bzw. 2 vor PHP 4.0.1
|
Was genau ist mit exklusiv und verteilt gemeint?
(am fflush() liegt es nicht, die Daten werden schon korrekt geschrieben)
Füge ich in der test.php
flock( $fp, LOCK_SH );
hinzu, dann funktioniert es zwar, aber erst nachdem, in der 1. Datei fclose() ausgeführt würde
Ich dachte, dass man mit dieser Funktion z.B. einen Counter realisieren könnte, in den nacheinander geschrieben wird, aber immer zugegriffen werden kann.
Geändert von einermeiner (21-10-2011 um 15:19 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|