Ankündigung

Einklappen
Keine Ankündigung bisher.

if Anweisung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • if Anweisung

    Hallo,

    ich bin dabei einen Counter/Besucherzähler zu programmieren. Nur leider habe ich ein Problem. Und zwar soll die counter.txt Datei (mache es später über einer Datenbank), wenn ein neuer Tag beginnt und die Seite aufgerufen wird, soll die Datei umbenannt werden.
    Nun zu meiner Frage.
    Kann man diese if Anweisung benutzen?

    if ($date++)
    {
    rename ("counter.txt", "counter-gestern.txt");
    }

    Hier einmal der Rest des Codes:
    PHP-Code:
    <?php
    if (file_exists ("counter.txt"))
    {
        
    $datei fopen ("counter.txt""r+");
    }
    else
    {
        
    $datei fopen ("counter.txt""w+");
    }
    $counterstand fgets ($datei10);
    if (
    $counterstand == "")
    {
        
    $counterstand 0;
    }
    $counterstand++;
    echo 
    "VisitsToday: $counterstand";
    rewind ($datei);
    fwrite ($datei$counterstand);
    fclose ($datei);
    date_default_timezone_set ('Europe/Berlin');
    $date date("d");
    echo 
    "<br />";
    echo 
    $date;
    ?>

  • #2
    Zitat von pelgro Beitrag anzeigen
    Und zwar soll die counter.txt Datei (mache es später über einer Datenbank), wenn ein neuer Tag beginnt und die Seite aufgerufen wird, soll die Datei umbenannt werden.
    Warum?

    Warum benennst du die Datei nicht gleich nach dem jeweils aktuellen Datum?

    Kann man diese if Anweisung benutzen?

    if ($date++)
    Nein, absoluter Blödsinn.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Danke für die unerwartet schnelle Antwort.

      Zitat von ChrisB
      Warum benennst du die Datei nicht gleich nach dem jeweils aktuellen Datum?
      Hä?

      Kommentar


      • #4
        Was bitte verstehst du nicht?
        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

        Kommentar


        • #5
          Den Satz -.-'
          Mein Gehirn ist aus welchen Grund auch immer ausgeschaltet

          Kommentar


          • #6
            Nix umbenennen. Wenn man die richtigen Flags für fopen verwendet kann man sich auch die Überprüfung auf Vorhandensein sparen:
            PHP-Code:
            $logfile 'log_'.date('Ymd').'.txt'
            $h fopen($logfile'a+'); 
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Zitat von pelgro Beitrag anzeigen
              Den Satz -.-'
              Mein Gehirn ist aus welchen Grund auch immer ausgeschaltet
              Dann schalte es bitte an bevor du weiter postest.

              Ich habe dich gefragt, warum du nicht den einfacheren Weg gehst, die Datei immer mit dem aktuellen Datum zu benennen - wenn du offenbar für jeden Tag eine neue Datei haben willst(?).

              (Der Weg ist deshalb einfacher, weil du damit nicht feststellen muss, ob ein Zugriff der erste an einem neuen Tag ist [nur dann wäre ja nach deinem Ansatz eine Datei umzubenennen], oder ob vorher bereits Zugriffe erfolgt sind [dann wäre nicht umzubenennen]. Das zu implementieren, wäre aufwendiger.)
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Du verwendest doch if für einen Vergleich - wo also ist dein Referenzwert? Das $date++ sagt doch gar nichts aus...
                Selbst im Rollstuhl kann man die Menschenrechte mit Füßen treten.
                Die Politik darf kein hirnfreier Raum sein.

                Kommentar


                • #9
                  Anscheind habe ich mich am Anfang falsch ausgedrückt.
                  Ich möchte einen Counter amchen der folgendes zählt:
                  Gesamt, Gestern, Heute
                  Das ist der Gesamt Counter:
                  PHP-Code:
                  <?php
                  $datei 
                  fopen ("counter-gesamt.txt""r+");
                  $counterstand fgets ($datei10);
                  if (
                  $counterstand == "")
                  {
                      
                  $counterstand 0;
                  }
                  $counterstand++;
                  echo 
                  "VisitsToday: $counterstand";
                  rewind ($datei);
                  fwrite ($datei$counterstand);
                  fclose ($datei);
                  ?>
                  Dann meine Idee für die anderen beiden:
                  Heute wird gezählt am Anfang eines neuen Tages wird die zu counter-gestern.txt umbenannt. Die Datei wird dann von einen weiteren Script ausgelesen und mit einem echo Befehl ausgeben.

                  Nur habe ich das Problem, dass ich nicht weiss wie ich die .txt Datei am Anfang des Tages umbenne.

                  Kommentar


                  • #10
                    Tag 0:
                    counter-gestern.txt gibts nicht, counter-heute.txt wird erstellt. Eine Umbenennung wird nicht benötigt.

                    Tag 1:
                    counter-heute.txt wird in counter-gestern.txt umbenannt, counter-heute.txt wird neu erstellt...

                    Tag 2:
                    counter-heute.txt wird in counter-gestern.txt umbenannt... doch halt, das schlägt fehl! counter-gestern.txt ist bereits vorhanden... egal, counter-gestern.txt in counter-vorgestern.txt umbenennen, dann counter-heute.txt in counter-gestern.txt umbenennen...

                    Tag 3:
                    counter-heute.txt wird in counter-gestern.txt umbenannt... doch halt, das schlägt fehl! counter-gestern.txt ist bereits vorhanden... egal, counter-gestern.txt in counter-vorgestern.txt umbenennen... verdammt, schlägt fehl, weil bereits vorhanden. Egal, counter-vorgestern.txt in counter-von-vor-2-tagen.txt umbenennen

                    ...


                    Alternative: Neuer Tag, neue Logdatei...
                    PHP-Code:
                    $logfile 'log_'.date('Ymd').'.txt'
                    $h fopen($logfile'a+'); 
                    oder: warum einfach, wenns auch kompliziert geht
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar


                    • #11
                      Zitat von lstegelitz Beitrag anzeigen
                      Tag 0:
                      counter-gestern.txt gibts nicht, counter-heute.txt wird erstellt. Eine Umbenennung wird nicht benötigt.

                      Tag 1:
                      counter-heute.txt wird in counter-gestern.txt umbenannt, counter-heute.txt wird neu erstellt...

                      Tag 2:
                      counter-heute.txt wird in counter-gestern.txt umbenannt... doch halt, das schlägt fehl! counter-gestern.txt ist bereits vorhanden... egal, counter-gestern.txt in counter-vorgestern.txt umbenennen, dann counter-heute.txt in counter-gestern.txt umbenennen...

                      Tag 3:
                      counter-heute.txt wird in counter-gestern.txt umbenannt... doch halt, das schlägt fehl! counter-gestern.txt ist bereits vorhanden... egal, counter-gestern.txt in counter-vorgestern.txt umbenennen... verdammt, schlägt fehl, weil bereits vorhanden. Egal, counter-vorgestern.txt in counter-von-vor-2-tagen.txt umbenennen

                      ...


                      Alternative: Neuer Tag, neue Logdatei...
                      PHP-Code:
                      $logfile 'log_'.date('Ymd').'.txt'
                      $h fopen($logfile'a+'); 
                      oder: warum einfach, wenns auch kompliziert geht
                      counter-gestern.txt wird natürlich vorher gelöscht. Hatte vergessen es zu erwähnen.

                      Kannst mir das mit den Logfiles mal näher erklären?
                      Den Code verstehe ich, aber den Sinn nicht.

                      Kommentar


                      • #12
                        Zitat von pelgro Beitrag anzeigen
                        Kannst mir das mit den Logfiles mal näher erklären?
                        Den Code verstehe ich, aber den Sinn nicht.
                        Du benötigst doch das Datum des Counters, um entscheiden zu können, ob bei einem Zugriff ein neuer Tag eingetreten ist, oder?

                        Wenn die Datei genauso wie das Datum "heißt" ist das einfach. Alternativ kannst du das Datum auch mit in die Datei schreiben oder du liest ihn mit filemtime()/filectime() aus.

                        Kommentar


                        • #13
                          Schau dir in der Doku die Funktion fopen() an, insbesondere das Flag 'a+'

                          Der "feste" Bestandteil des Dateinamens ist irrelevant (sorry, falls ich dich damit verwirrt haben sollte, hab jetzt log_ durch counter_ ersetzt), es geht um den "variablen" Teil. Dieser variable Teil ist das aktuelle Datum in der Form JJJJMMTT (wird erreicht durch date('Ymd')...).

                          Das heisst: Solange der heutige Tag andauert, ist der Dateiname IMMER counter_20100413.txt.

                          Sobald der nächste Tag anbricht, wird ein anderer Dateiname erzeugt: counter_20100414.txt

                          Du brauchst nicht mehr überprüfen, ob eine Datei vorhanden ist oder nicht, es muss nichts umbenannt werden - du öffnest / erzeugst die Datei einfach und verwendest sie (a+ hilft dir dabei!).

                          Wenn du nun eine Datei von gestern öffnen möchtest, musst du "nur" das Datum von gestern ermitteln und den Dateinamen bauen:
                          PHP-Code:
                          $yesterday date('Ymd'strtotime("-1 days"));
                          $logfile 'counter_'.$yesterday.'.txt'
                          Hier solltest du aber prüfen ob die Datei vorhanden ist...
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #14
                            Strapazier Dein Dateisystem doch nicht unnötig, bleib bei EINER Textdatei:
                            Code:
                            1271109600_125
                            1271196000_130
                            Die Werte links sind der Zeitstempel (UNIX) für das Datum von Heute (14.04.2010 - 0:00 Uhr) und Gestern (Heute - 86400 Sekunden)
                            Jetzt brauchst doch bloß per explode() am Underscore trennen und hast Zeitstempel und entsprechende Counterzahl.

                            Um die Datei nicht zu groß werden zu lassen, kannst' anhand des Zeitstempels ältere als "gestern" rausschmeissen.
                            Kannst' auch lassen, wenn Du ne Art Historie haben willst...
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              Strapazier Dein Dateisystem doch nicht unnötig, bleib bei EINER Textdatei:
                              Das Dateisystem wird mit 3 Dateien schon noch umgehen können. Die Variante halte ich für besser, als mit einer Datei hin und her zu fummeln (alte Daten löschen, neue rein).
                              [I]Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)[/I]
                              [I]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/I]

                              Kommentar

                              Lädt...
                              X