PHP Textdateien unterscheidlich Speichern/Auslesen

Blechdose

Ensign
Registriert
Mai 2008
Beiträge
148
Hallo liebe Community,

in letzter Zeit habe ich damit begonnen PHP etwas besser kennenzulernen. Als erstes Ziel habe ich mir dabei einen recht einfachen Editor gesetzt. Dieser besteht im Grunde aus drei Dateien:

index.php

PHP:
// Ab hier wird die Datei eingelesen und dargestellt.
<?PHP

                                   echo"<b>Inhalt: </b><p></p> <br>";
                                    //Lesen aller Zeilen einer Textdatei
                                    $fp = fopen("temp.txt","r"); // Datei öffnen
                                    if ($fp)
                                    {

                                        while(!feof($fp))//Solange bis der Dateizeiger am Ende der Datei ist
                                        {
                                           $zeile = fgets($fp,102);//Einlesem der Zeilen

                                           echo"$zeile <p></p>";//Ausgabe
                                        }
                                    fclose($fp); // Datei schließen
                                    }
                                    else
                                    {
                                    echo "Datei wurde nicht gefunden"; // Sollte Datei nicht vorhanden sein
                                    }

                           // Hier wird der Text ausgegeben
                        ?>
[B]// Ab hier steht der "Editor"[/B]
<div class="comment">
         <form action="core.php" method="post" >
<textarea cols="30" rows="15" name="data"><?PHP //echo $cd;?></textarea>

<div class="buttona">
         <input type="submit" value="Speichern">
</div>

meine core.php:
PHP:
// Speichert die Datei hier ab
<?PHP
$data = $_POST['data'];
$cd = $_POST['cd'];
$zeit = date(" H:i:s, <p></p>");
$fdata = fopen("temp.txt","w");
fwrite($fdata,$zeit);
fwrite($fdata,$data);
fclose($fdata);


echo "<script language='javascript'>
alert('Vielen Dank der Artikel wurde gespeichert, bitte warten...!');
</script>";
?>

Soweit so gut, Ich schreibe was in die Textbox drücke auf speichern die temp.txt wird erstellt und auch gleich wieder ausgelesen.
Nun zu meiner eigentlichen Frage:
Der Editor wird sehr oft benutzt, speichert nun gerade jemand einen Text ist der andere ja wieder überschrieben, deshalb meine Frage kann man das nicht so machen, dass beim Speichern die Datei "temp_new.txt" erstellt wird in der der neue Text hineinkommt und wenn dann wieder jemand etwas schreibt den Text aus der "temp_new.txt" in eine andere Datei verschiebt "temp_old.txt" den neuen Text aber gleichzeitig ins neue schreibt?

Ich sowas ist sicherlich leicht mit Datenbanken zu machen, aber damit möchte ich mich noch nicht beschäftigen. Erstmal soll so ein simples Beispiel reichen.

Jemand ne Idee?
 
Ohne überhaupt was gelesen zu haben, springt mir das ins Gesicht:
date() erwartet einen String und einen Zeitstempel.
Deines ist weder noch.
PHP:
$zeit = date(" H:i:s, <p></p>");
#  muss zu dem werden === >   *Bearbeitet für Destruction*
$zeit = date(" H:i:s", $timestamp);
 
Zuletzt bearbeitet:
Das Vorhaben ist mit einer Datenbank wesentlich einfacher lösbar. Die Dateibearbeitung unter Multithreadingaspekten ist nicht ohne und die verschiedensten Aspekte sind selbst für langjährige Programmierer anspruchsvoll. Eine Datenbank nimmt diese Aspekte zu einem großen Teil ab.

Aber um zum Thema zu kommen Vermutlich wirst du dazu die Funktion "flock()" nutzen wollen um z.B. über eine zentrale Lock-Datei die Datei-Operationen in geordnete Bahnen zu bringen (damit nicht gleichzeitig jemand eine Datei liest während jemand anders darin schreibt).
Des Weiteren könntest du eine Art Inhaltsverzeichnis irgendwo festlegen damit man die angelegten Dateien auch wieder findet. Ewig weiterverschieben in "old" wird kaum gehen. Daher wäre es wohl sinnvoller, in den Dateinamen die Uhrzeit und einen Zufallswert einzubauen. Bedenke dabei aber auch den Fall, dass innerhalb einer Sekunde 2 User eine Datei anlegen könnten und auch die random-Funktion mitunter nicht so zufällig ist wie man denkt (daher: wenn Datei existiert, dann andereren Namen erzeugen bis freie gefunden)! Alternativ könntest du auch in ner Datei einen Zähler schreiben und entsprechend immer um eins erhöhen (dabei immer schön darauf achten, den Lockingmechanismus zu nutzen!).
 
Eagle-PsyX- schrieb:
Ohne überhaupt was gelesen zu haben, springt mir das ins Gesicht:
date() erwartet einen String mit dem Zeitstempel.
Deines ist weder noch.
PHP:
$zeit = date(" H:i:s", $timestamp);

Das wäre mir neu das man den angeben muss. :) :)
Hoffen wir mal dass es dein Gesicht nicht zu sehr geschädigt hat =P =P
 
Eagle-PsyX- bezog sich wohl auf das hier vom Threadersteller:
Code:
$zeit = date(" H:i:s, <p></p>");
Ich denke, er hat sich bei den Anführungszeichen etwas verguckt. Er meinte wohl, dass der zweite Parameter "<p></p>" ist - was aber nicht der Fall ist.
 
$zeit = date(" H:i:s, <p></p>");

habe ich mit Absicht rein getan, damit es mir nach meiner Zeit einen Absatz macht. Ist aber hier nicht so wichtig.

Okay also verstehe ich das so richtig:
Ich muss 2 Dateien erzeugen, in die eine lass ich den Text reinschreiben, dann sage ich, dass wenn wieder neuer Text geschrieben wurde, es den alten in einer neuen Datei schreibt( bzw. die Datei umbenennt). Die alte Datei aber vor dem speichern des nächsten Textes wieder löscht und sie anschließend wieder erzeugt?

EDIT:

Ich hab mir das ganze nochmal langsam durch den Kopf gehen lassen. Dabei ist die Lösung eigentlich simple:
Ich habe auf meinem Server 'temp_neu.txt' und 'temp_old.txt', diese lasse ich auf meiner Hauptseite (index.php) mit fopen() öffnen.
In meiner Core.php frage ich zuerst ab ob die 'temp_neu.txt' besteht, ist dies der Fall wird der Inhalt von ihr in 'temp_old.txt' kopiert, erst dann wird der eben geschrieben Text in die neue Datei hineingeschrieben. Funktioniert prima, auch ohne Verwendung einer Datenbank ;)
 
Zuletzt bearbeitet:
Zurück
Oben