PHP Anweisungen koppeln und Sachen löschen
-
Diese blöden Dateien nerven langsam.
So hier mal mein Code womit ich die erste Zeile immer lösche.//Funktion lässt die erste Zeile aus und schreibt den Rest in eine neue Datei und löscht die alte und benennet die //neue in die alte um. $oldfile = '2006.txt'; // Shared lock auf die Quelldatei $old = fopen($oldfile, "r"); // Exclusive lock auf die Zieldatei $new = fopen($oldfile.".new", "w"); $lineno = 0; $zielzeile = 0; $i = 1; while($line = fgets($old, 500)) { if ($lineno++ == $zielzeile) continue; // Zeile auslassen fputs($new, $line);//Den Rest in die neue Datei schreiben } fclose($old); //Schließt den Lock automatisch //Datei in das Archiv kopieren bevor sie gelöscht wird copy($oldfile, '../Archiv Auftritte/2006/2006.txt'); // Alte Datei wegwerfen. unlink($old); // Neue Datei schließen und dabei Lock aufgeben. fclose($new); // Neue Datei umbenennen. rename($oldfile.".new", $oldfile);
Und die erste Zeile wird ja mit "continue" übersprungen.
Aber ich muss die erste Zeile wieder in ner anderen Datei speichern. Aber wie bekomme ich die jetzt raus aus der Datei?
-
Indem du sie vor dem continue in einer weiteren Variable zwischenspeicherst und dann in die andere Datei schreibst?
-
Ok das Problem hab ich jetzt auch behoben. Aber ich hab immer noch das Design Problem was ich ein paar Antworten vorher beschrieben hab. Ich hoffe da kann mir wer helfen.
MFG und THX
-
Vielleicht solltest du dieses Designproblem nochmal so beschreiben, dass man es auch verstehen kann. Und evtl. auch noch ein bisschen Quelltext dazuliefern, damit man es nachvollziehen kann.
-
Also ich will das eine Funktion nur z.B. einmal im Monat ausgeführt wird. Aber wenn ich das Datum ermittle und das mit einer if-Anweisung machen, wird die Funktion ja jedesmal ausgeführt wenn das PHP Skript geöffnet wird.
So und ich möchte jetzt, dass die Anweisung nur genau einmal pro Monat ausgeführt wird.
Code hab ich leider nich, weil man sich die if-Anweisungen ja auch denken kann. Aber trotzdem mal:$Heute = date("d.m.Y"); if ($Heute == "01.01.2006") { //Anweisung einmal ausführen } else if ($Heute == "01.02.2006") { //Anweisung einmal ausführen } ....
-
oh man bin ich blöd. Ich hab gerade die Lösung gefunden. Ich teste die mal und wenns net klappt denn poste ich hier nochmal aber trotzdem DANKE fürs Bemühen.
MFG
-
Hmm ne war doch net so die Lösung.
Also bei meinem Vorschlag oben, wird die Anweisung ja nur einmal im Monat ausgeführt aber auch nur an einem Tag. Und wenn ich Pech hab denn kommt an diesem Tag keiner auf meine Seite und die Funktion wird nich ausgeführt. Wie kann ich das besser machen??
MFG
-
Indem du bei jedem Seitenaufruf zum Beispiel den aktuellen Monat abfragst, deine Aktionen ausführst und dann loggst, dass es diesen Monat bereits geschehen ist? Beim nächsten mal kannst du das erkennen und die Aktionen dementsprechend überspringen.
Oder abspeichern, an welchem Datum es zum letzten mal geschehen ist und dann immer die Differenz zum aktuellen Zeitpunkt berechnen. Wenn sie groß genug ist, erneut ausführen und das alte Datum mit dem aktuellen überschreiben.
-
So hab jetzt mal n bisschen Code ausgearbeitet und das funktioniert leider immer noch nich.
$log = fopen('log.txt', 'w'); $line_log = fgets($log, 500); //erste Zeile einlesen if ($Heute >= "22.01.2006") { if ($line_log == 0) { Copy_Archiv(); Archiv(); fputs($log, 1); } else if ($line_log != 0) { //tuh nichts } } else if ($Heute >= "19.02.2006") { if ($line_log == '1') { Copy_Archiv(); Archiv(); fputs($log, '2'); } else if ($line_log != '1') { //tuh nichts } }
Das ist mal n kleiner Ausschnitt aus meinem Skript.
-
Also da sind jetzt 2 Möglichkeiten gepostet. einmal mit ' und einmal ohne das Zeichen. Beide funktionieren nicht.
-
Nunja, meine Vorschläge kennst du ja.
Aber 1.) Kannst du zwei Datumsangaben nicht einfach im deutschen Format vergleichen. Dann käme ja der "01.02.2006" vor dem "31.01.2006".
und 2.) Ist dein Ansatz völlig falsch.
-
Denn muss ich also die englische(?) Datumsausgabe benutzen? Also denn 2006.01.29 oder so?
Und was is daran so falsch? Denn versteh ich das nich so ganz wie du das genauer meinst.
-
Woher soll die Maschine wissen, was bei dir Monat, Jahr und Tag ist?
03.05.05 - Dritter Mai 2005? Fünfter März 2005? Fünfter Mai 2003? Oder wie?Außerdem würde ich niemals arithmetische Operatoren auf String anwenden ...
Schau dir mal mktime und Timestamp Handling an.
-
Desert Storm schrieb:
Und was is daran so falsch?
Wenn der Vergleich stimmen würde und es nach dem 22.01.2006 ist, springt er stets in die erste if-Anweisung. Der else-Teil würde nie beachtet werden, selbst wenn es nach dem 19.02.2006 ist. Es würde wohl funktionieren, wenn du das "else" einfach weglässt, aber dann bräuchtest du immer noch für jedes einzelne Backup eine extra if-Anweisung. Und das hat mit Automatisierung nicht viel zu tun.
Am sinnvollsten ist meines Erachtens nach folgendes: Du speicherst in deiner Log-Datei den MONAT des letzten Backups (um das herauszufinden siehe auch date()) und vergleiche den gespeicherten Wert immer mit dem aktuellen. Wenn die beiden ungleich sind, einfach Backup ausführen und den alten Monatswert in der Log-Datei mit dem neuen überschreiben. Dann wird dein Backup immer dann ausgeführt, wenn jemand zum ersten Mal im neuen Monat auf die Seite kommt.
-
Aber ich hab ja noch das Problem das ich jeden Monat verschieden oft das Backup ausführen muss. Also muss ich ja schon für jeden Monat ne einzelne if-Anweisung machen. Oder nicht?
Aber ich werde das mal alles umbauen und das Backup nur jeden Monat ausführen.
Und nochmals für die Hilfe auch wenn ich manchmal lästig erscheine!!!
MFG