Textdatei editieren

Sasser

Erfahrenes Mitglied
Hallo Leute!

Ich habe eine Textdatei inder Daten im Format;

$item|...........|$downloads

sich befinden. Nun lese ich zum $item die Daten aus.

PHP:
foreach( file( "intern/settings/software.txt" ) as $v ) 
{
    $d = explode( "|", $v );
    if ( $d[0] == "$item" )
    {
        $downloads = $d[7];
    }
}

addiere einen Download dazu: $downloads = $downloads+1;

und möchte nun $downloads wieder in die Textdatei schreiben. Nun haberts aber, da ich nicht weis wie ich das anstelle!?

Hat jemand eine Idee und könnte mir mit etwas Code helfen? :confused:
 
Hi,
kurze Frage am Rande: Muss es ein Text-File sein oder hast du auch eine Datenbank (mysql z.B.) zur verfügung ?
Mit einer Datenbank geht es viel einfacher als mit Text-files !!

PS: soll das ein counter werden, der zählt,wieviel mal eine datei gedownloadet wurde ?
 
Hmm SQL geht leider nicht!

Und genau richtig, es wird ein Downloadcounter, der zählt wie oft gedownloadet wurde.

Ist es nicht realisierbar? :(
 
Das geht auch mit einer Textdatei.
Es sieht ja so aus, als wenn du nur eine Zeile in der Datei hast. Du hast in deinem Code ja schon den Anzahl-Wert herausgefunden. Nun kannst du erneut die Datei in eine Variable einlesen und trennst es diesmal nicht anhand von "|" auf, sondern machst ein explode mit der Anzahl. Das Array an Stelle "0" wird dann der Anfang, Array an Stelle 1 wird wieder mit einem explode aufgeteilt. Mitteleren Teil entsprechend abändern, wieder alles zusammenfügen und die Datei mit der Option "w" öffnen und damit überschreiben.

Ich habe das auch schonmal bei einem Projekt gebraucht, wo keine Datenbank zur verfügung stand. Hier ein Teil meines Codes als Beispiel:

PHP:
$data = file_get_contents("datei.txt");
			//$dsatz[0] ist bei dir entsprechend der Zähler
			$teil = explode("$dsatz[0]", $data);
			$anfang = $teil[0];

			$ende = explode("|", $teil[1],2);
			$ende = $ende[1];

Man setze dann also zusammen: $anfang."neuerzähler".$ende.
Geht natürlich nur, wenn nicht ein anderer Teil die gleiche Zahl enthält wie der Zähler...
 
Hmm... eigentlich fast schon ein wenig zu aufwändig für dein Problem. Wenn du nur eine Zeile hast, dann füg einfach die Arrayteile, die du ja nun schon hast, wieder zusammen und ersetz den Zähler einfach mit dem neuen Wert. Und die Trennzeichen natürlich nicht vergessen ;-)
 
Nein ich habe mehrere Zeilen in der Textdatei!

Ich weis trotzdem noch nicht wie ich das anwenden soll :(
 
Ok, ist natürlich schlecht, nach einer Zahl aufzuteilen, wenn sie mehrfach vorkommen kann...
Also du durchläufst ja mit deinem Code jede Zeile. Schreibe diese am Ende des foreach wieder in die Textdatei. Nur die Zeile, in der der Name mit "item" übereinstimmt, erhöhst du auch den Zähler in der if-Schleife und änderst den Wert des Elements. Dann kannst du diese manipulierte Zeile auch unterbringen.

Beim erstenmal solltest du dann die Datei ganz überschreiben (mit Zeiger "w" beim Öffnen), und dann, um Zeilen dranzuhängen mit "a+".

Codebeispiel für´s Schreiben:

PHP:
$schreiben = fopen("./datei.txt","w");
fwrite($schreiben,$v);
fclose($schreiben);

Die veränderte Zeile kannst du z.B. folgendermaßen in $v schreiben:

PHP:
$v = $d[0].$d[1].$d....$d[n];

Ich hoffe, das hilft dir etwas mehr...
 
Schau mal, kann man das nicht ein wenig abändern?

PHP:
$strSourceFile = "intern/settings/software.txt";
$strContent = file_get_contents($strSourceFile);
$rscSource = fopen($strSourceFile, 'w');
$arrData = array($name, $ID, $lizenz, $price, $url, $path_parts["extension"], $info, $downloads);
if( is_resource($rscSource) )
{
$strContent = (strlen($strContent) > 0 ) ? "\r\n" . $strContent : $strContent;
fputs($rscSource, implode("|", $arrData) . $strContent );
fclose($rscSource);
}

Wie gesagt, in SQL ist das alles kein Problem, aber hier haberts bei mir gewaltig :(
 
Ist das eigentlich sicher? Also ich meine was ist wenn der Benutzer während der Prozedur abbricht indem er den Browser schließt etc. ?

Kann es passieren, dass dann die ganze Datei Schrott ist?

Danke für eure Hilfe!
 
SQL- ist mir auch immer lieber ;-) bei Textdateien muss ich auch immer mehr rumprobieren... Also ob das sicher ist, hab ich auch schon überlegt. Wenn der User seinen Browser schließt, dürfte es kein Problem geben, weil der Server das Ganze ausführt. Wenn dieser mal ein Problem hat, kann es vielleicht zu Datenverlusten kommen (aber dafür gibt es ja immer ein Backup... sollte es zumindest ;-) ).


Soo... dein Quelltext: also wenn ich das richtig sehe, dann lässt du den ganzen bisherigen Inhalt der Datei wie er ist und fügst immer eine Zeile hinzu. Das muss natürlich ein wenig abgeändert werden, also etwa wie ich das beschrieben hab. Du musst die Zeile finden, in der der Zähler verändert wird und die dann abändern und den Rest halt so lassen, wie er ist und unverändert wieder einfügen.

Wenn allerdings jemand ne bessere Idee hat, weil er mehr Erfahrung mit Textdateien hat, kann er sich auch gerne hierzu äußern ;-)
 

Neue Beiträge

Zurück