Ich bin mir nicht sicher ob ich das jetzt richtig verstanden habe.
Mit file_get_contents() lese ich ja nur, wenn ich die Datei aber mit fopen(), flock(), fwrite() und fclose() anlegen will könnte ja sein das fopen die Datei schon angelegt hat.
file_get_contents() findet schon eine noch leere Datei und wird das Datum auf 0 setzen.
Wie kann ich das umgehen ohne unixdatum nochmal auf Plausibilität zu prüfen und erneut auslesen zu lassen.
Was passiert wenn zwei User gleichzeitig die selbe Datei anlegen wollen? Ich bin ein wenig verwirrt.
Hello,
if (file_exists("../berechtigungen/user.txt"))
{
$date = file_get_contents("../berechtigungen/user.txt");
}else{Du kannst
Anmerkung von Mister Tocttou[1]: Du musst!
dir noch einen Dateisystemzugriff sparen, wenn du direkt file_get_contents() ausführst. Wenn die Datei nicht vorhanden/lesbar ist, gibt die Funktion false zurück, auf das du testen kannst. Zum Unterscheiden von einer leeren Datei musst du aber einen typsicheren Vergleich verwenden.
if (($date = file_get_contents("../berechtigungen/user.txt")) === false)
mysqlabfrageUnd wenn wir schon mal dabei sind: file_get_contents() ist nur bedingt multithreadingfest.
Betrachtet werden muss ja immer das Pärchen aus Lese- und Schreibfunktion. Solange die nicht mit einem gemeinsamen Handle arbeiten können, oder ein anderer _gemeinsamer_ Mechanismus für die Zugriffskontrolle besteht, bleibt das TOCTTOU-Problem bestehen.http://en.wikipedia.org/wiki/Time-of-check-to-time-of-use
http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/Es ist also angeraten, dass der OP mit den klassischen Funktionen fopen(), flock(), fread(), fwrite() und fclose() arbeitet.
[1] so hattest Du mich doch neulich genannt, oder?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg