Cronjob Umgehen

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

  • Cronjob Umgehen

    Hallo community, bin seid 2003 bei php hab dann eine pause von ca. nem jahr gemacht und fange langsam wieder an.

    Also zu meiner Frage:
    Ist es möglich mittes der Serverzeit und eine IF abfrage einen cronjob zu ersetzen?

    Hier ein beispiel (syntax habe ich nicht beachtet):


    Wenn die serverzeit = 00:00 (mitternacht) ist soll die datenbank sortiert werden.


    Diese If abfrage wollte ich in den index der webseite schreiben, so das jeder user diesen vergleich ausführt. Ist dieser Vergleich wahr so wird die datenbank neu sortiert.

    Diese Lösung ist natürlich nicht besonders schlau da eine minute lang jede nach die datenbank neu sortiert wird.

    Ich weiß jedoch das es auch anders geht: JMbsoft.com und g5-scripts.de zum Beispiel haben dies in ihren Toplist scripten umgesetzet. Alle 24 stunden wird die datenbank auf 0 zurückgesetz und das völlig ohne cronjob.
    Könnte mir jemand ein Tipp geben wie ich die IF abfrage umschreiben sollte um dies möglichst effizient zu erreichen?


    Vielen Dank im voraus.

  • #2
    Denkfehler - stell dir vor es ist Mitternacht und kein Schwein geht hin!?

    Wenn das Script um Mitternacht nicht aufgerufen wird, wird die Datenbank überhaupt nicht sortiert.
    "if Serverzeit > 0:00" geht aber auch nicht, denn das ist äquivalent zu "if Serverzeit != 0:00", also fast immer wahr.

    Richtig wäre "if Serverzeit > 0:00 && !sortiert", also festhalten, ob die DB heute schon sortiert wurde.

    Damit taucht aber ein neues Problem auf: Der Vermerk "sortiert" muß spätestens 0:00 verfallen, sonst wird nur einmal und nie wieder sortiert. Eigentlich ist es gar kein neues Problem, sondern das gleiche wie eingangs.
    Aber da der Vermerk sein Alter kennt, ist es leicht lösbar: Du sortierst immer dann, wenn der Vermerk zur letzten Mitternacht älter als 24 Stunden war und setzt den Vermerk neu. Selbstverständlich brauchst du dann die aktuelle Serverzeit überhaupt nicht mehr berücksichtigen.
    Zur besseren Erklärung etwas Code:
    PHP-Code:
    if (!file_exists('vermerk')  || filemtime('vermerk') - $last_midnight_ts 0) {
        
    unlink('vermerk'); touch('vermerk');
        
    sortDB();

    Der Trick ist hier, eine Datei als Vermerk zu benutzen und den Zeitpunkt ihrer letzten Änderung als Alter des Vermerks bzw. Zeitpunkt der letzten Sortierung.


    Jetzt noch eine Frage am Rande: Was willst du da genau Sortieren?
    Zuletzt geändert von onemorenerd; 24.05.2006, 00:30.

    Kommentar


    • #3
      Das sehe ich auch so:
      Eine Relationale Datenbank braucht man nicht zu sortieren!

      Eine Alternative zu dem "Datum in Datei und If Konstrukt":
      http://www.cronjob.de/
      *ungetestet*
      Wir werden alle sterben

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        Denkfehler - stell dir vor es ist Mitternacht und kein Schwein geht hin!?

        Wenn das Script um Mitternacht nicht aufgerufen wird, wird die Datenbank überhaupt nicht sortiert.
        "if Serverzeit > 0:00" geht aber auch nicht, denn das ist äquivalent zu "if Serverzeit != 0:00", also fast immer wahr.

        Richtig wäre "if Serverzeit > 0:00 && !sortiert", also festhalten, ob die DB heute schon sortiert wurde.

        Damit taucht aber ein neues Problem auf: Der Vermerk "sortiert" muß spätestens 0:00 verfallen, sonst wird nur einmal und nie wieder sortiert. Eigentlich ist es gar kein neues Problem, sondern das gleiche wie eingangs.
        Aber da der Vermerk sein Alter kennt, ist es leicht lösbar: Du sortierst immer dann, wenn der Vermerk zur letzten Mitternacht älter als 24 Stunden war und setzt den Vermerk neu. Selbstverständlich brauchst du dann die aktuelle Serverzeit überhaupt nicht mehr berücksichtigen.
        Zur besseren Erklärung etwas Code:
        PHP-Code:
        if (!file_exists('vermerk')  || filemtime('vermerk') - $last_midnight_ts 0) {
            
        unlink('vermerk'); touch('vermerk');
            
        sortDB();

        Der Trick ist hier, eine Datei als Vermerk zu benutzen und den Zeitpunkt ihrer letzten Änderung als Alter des Vermerks bzw. Zeitpunkt der letzten Sortierung.


        Jetzt noch eine Frage am Rande: Was willst du da genau Sortieren?
        Aha sehr clever das mit der Datei. Dankeschön.
        Es wäre also im prinzip so, dass die If abfrage lediglich prüft ob die Datei vor 24 stunden geändert wurde oder nicht. So wäre das ständige neusortieren abgeschaltet.

        Nun zum Script und dem sortieren:

        Es sollen beiträge geschrieben werden die mit ihrem Datum in der Datenbank abgespeichert werden.

        Dieses dort abgespeicherte Datum wird mit der Datum des Servers abgeglichen (mit der von dir beschriebenen prozedur). Beträgt dieses datum eine diverenz von genau 1 Tag so wird. Der Beitrag mit einem "-1" versehen. Wenn der betrag zwi tage alt ist mit eine "-2" usw. bis zur "-3" und danach "archive".

        Die PHP Datei wiederum prüft ob die Datensätze heutigem Datums sind. jeh nachdem wie alt die datensätze sind werden diese ausgegeben. In dieser Reihenfolge werden die beiträge dann aufgelistet. Die neusten ganz oben.


        So wäre die Grundüberlegung zum Sortiervorgang.

        Kommentar


        • #5
          Original geschrieben von Scr1pt3r
          Dieses dort abgespeicherte Datum wird mit der Datum des Servers abgeglichen (mit der von dir beschriebenen prozedur). Beträgt dieses datum eine diverenz von genau 1 Tag so wird. Der Beitrag mit einem "-1" versehen. Wenn der betrag zwi tage alt ist mit eine "-2" usw. bis zur "-3" und danach "archive".
          Das ist ziemlicher Nonsense.

          Diese absolut triviale Datumsberechnung macht die DB auch locker in Echtzeit für dich während der Abfrage.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Original geschrieben von wahsaga
            Das ist ziemlicher Nonsense.

            Diese absolut triviale Datumsberechnung macht die DB auch locker in Echtzeit für dich während der Abfrage.

            Wirklich? Das kann Mysql? Wow nicht schlecht. Naja da merkt man das ich sonst immer .txt Dateien als datenbanken benutzt habe. Da muss man noch allen per Hand machen.


            Hab mich gerade auch etwas über mysql schlau gemacht. Heir ein Beispiel.

            PHP-Code:
                   $abfrage "SELECT * FROM free_news ORDER BY `id` DESC LIMIT $start"//abfrage 
            das ORDER BY scheint wohl die Schnittstelle zu sein.
            Meine Güthe was es heute schon alles gibt, es wird wirklich alles einfacher.

            Kommentar

            Lädt...
            X