• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

flock, fputs ?

wapplegraph

Normande
Registriert
12.04.06
Beiträge
571
Hallo

Ich habe eine Frage bei PHP: wenn man etwas z.B in einer .txt Datei ändern möchte, so löst man dies mit flock, fopen und fputs oder gibts hier andere bessere Lösungen?

Besten Dank Jonas
 
Zuletzt bearbeitet:
Flock? O.o hab ich was verpasst?
Ich benutz dazu TextEdit ("In reinen Text umwandeln", wenn du ne neue .txtdatei erstellst) oder Smultron (einfach .txt anfügen, wenn du ne neue machst)...
 
Sag das doch...
Keine Ahnung :D
 
guck doch mal bei php.net - da müsstest du unter fputs auch noch ähnliche funktionen finden, wenn es die gibt...
 
Hallo

Ich habe eine Frage bei PHP: wenn man etwas z.B in einer .txt Datei ändern möchte, so löst man dies mit flock, fopen und fputs oder gibts hier andere bessere Lösungen?

Besten Dank Jonas

Das kommt ganz darauf an, was mit der Datei passieren soll. Der übliche Weg wäre, zunächst zu prüfen, ob Du die Datei lesen darfst: is_readable($file). Dann kannst Du die Datei entweder mit file() oder mit file_get_contents einlesen. fopen und fputs können auch praktischer sein, das hängt jedoch von Deinen Wünschen ab. Wie mein Vorredner schon schrieb, solltest Du hier einfach mal in die Doku schauen ;)
 
stimmt, mit "file_get_contents" kannst du auch mit einem einzigen befehl eine komplette datei einlesen, aber denk dran:

1. existiert die datei (file_exists)??
2. darfst du sie lesen (is_readable)??

und dann erst einlesen...;-)


-me
 
Wenn die Datei "readable" ist, existiert sie auch. Die erste Funktion kann man sich also sparen. Funktioniert zumindest bei mir ganz gut.
 
Wenn die Datei "readable" ist, existiert sie auch. Die erste Funktion kann man sich also sparen. Funktioniert zumindest bei mir ganz gut.

:-p und wenn man die datei lesen kann, dann existiert sie wohl und ist auch lesbar - nur ohne die vielen schritte ist eine spätere fehleranalyse schwieriger, was in diesem fall ja eher kein problem darstellen sollte...
 
:-p und wenn man die datei lesen kann, dann existiert sie wohl und ist auch lesbar - nur ohne die vielen schritte ist eine spätere fehleranalyse schwieriger, was in diesem fall ja eher kein problem darstellen sollte...

Kommt eben darauf an, ob man Exceptions »manuell« abfangen (also ohne, dass PHP Exceptions kennt) möchte, und wie hoch man die eigenen Ansprüche schraubt. Für den Schnell&Dreckig-Ansatz mag das genügen, für den OOP-Ansatz wäre das natürlich unschön. Man kann's ja so lösen:

Code:
<?php

    $filename = '/pfad/zum/text.txt';
    $errors = array();
    if (file_exists($filename)) {
        if (is_readable($filename)) {
            if ($file_contents = file_get_contents($filename)) {
                 // Aufruf von fummel_an_datei_rum();
            } else {
                 $errors['file_get_contents'] = 'Die Datei konnte nicht eingelesen werden. Abbruch.';
            }
        } else {
            $errors['is_readable'] = 'Die Datei durfte nicht eingelesen werden. Abbruch.';
        }
    } else {
        $errors['file_exists'] = 'Die Datei existierte nicht. Abbruch.';
    }
?>

Solche Fehlersammler sind hilfreiche Konstrukte, wenn man sich noch nicht so sicher ist, oder eine ausführliche Debug-Ausgabe plant. Später weiß man dann mit echo"<pre>\n", print_r($errors), "</pre>\n"; genau, was los ist, wenn kein fataler Fehler aufgetreten ist.
 
Bist Du Sicher, Dein Ansatz ist sicher? Siehe Kommentar im Code.
Code:
<?php

    $filename = '/pfad/zum/text.txt';
    $errors = array();
    if (file_exists($filename)) {
         if (is_readable($filename)) {
            if ($file_contents = file_get_contents($filename)) {
            # Hier könnte das Multitasking zuschlagen und ein anderer Prozess
            # kann Dir die Datai löschen.
            # Dumm gelaufen, denn nun sollte es eine Exception geben.
                // Aufruf von fummel_an_datei_rum();
            } else {
Also ein file locking sollte man schon als allererstes versuchen, damit einem niemand die Datei entzieht.
 
Bist Du Sicher, Dein Ansatz ist sicher? Siehe Kommentar im Code.

Also ein file locking sollte man schon als allererstes versuchen, damit einem niemand die Datei entzieht.

Ja, auf jeden Fall. Mit ein Grund, warum ich Dateioperationen zugunsten von Datenbanklösungen vermeide. flock() funktioniert nämlich leider nicht immer zuverlässig, »LOCK TABLE« schon (also sei MySQL 4.1).
 
Würg, warum benutzt Du keine richtige Datenbank und schickst ihr Transaktionen?

»Würg«, das tue ich, wenn ich das brauche, aber ich habe den Eindruck, wir schweifen ab. Im Übrigen denke ich, dass skeeves Beitrag hilfreich ist, ein »Würg«-Einwurf jedoch nicht.
 
Hallo

Danke für eure Antworten, werde dies alles einmal testen und anschauen.

Merci wapplegraph
 
»Würg«, das tue ich, wenn ich das brauche, aber ich habe den Eindruck, wir schweifen ab. Im Übrigen denke ich, dass skeeves Beitrag hilfreich ist, ein »Würg«-Einwurf jedoch nicht.
Es geht darum den grundlegenden Entwurf zu überdenken. Es gibt wenige bis gar keine Gründe auf Dateien zuzugreifen, aber das trifft auf TABLE LOCKS genauso zu. TABLE Locks benutzt man nur dann, wenn man keine echtes RDBMS hat und sich mit dieser Krücke behelfen muß. Selbst MySQL kennt einen halbwegs brauchbaren Tabellentypen (InnoDB).