Ausgabe einer Schleife Zeitverzögern

son gohan

Erfahrenes Mitglied
Ich habe ein array mit vielen Hyperlinks.

Mit einer for Schleife lass ich jeweils 5 Links in eine Liste ausgeben, vorher mische ich das array noch mit shuffle() durch damit nicht immer die gleichen Links ausgegeben werden.

Jetzt will ich aber das nur jeden Tag einmal die Schleife neue Links ausgibt und nicht wie zur Zeit bei jedem Neuladen der Seite, also wie muss ich da vorgehen?
 
Du kannst das ganze mit einem cronjob durchlaufen lassen.
Oder du simulierst einfach einen Cronjob. Ich glaube zum simulieren von cronjobs gibt es auch hier ein Tutorial.

Wenn nicht, dann versuchs einfach so:
du legst eine Datei od. eine Mysql Tabelle an. Ich machs jetzt mal anhand einer Mysql Tabelle.
PHP:
<?php
$zeit = time();
$sql = "SELECT * FROM `tabelle`";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result)
if($row['zeit'] + 86400 <= $zeit)
  {
  shuffle($array);
  $sql = "UPDATE `tabelle` SET `zeit` = '$time' , `link1` = '$array[0]' .... ";
 }

echo $row['link1'];
echo $row['link2'];
  
?>
hoffe das hilft dir als Gedankenanstoß

Lg.
Garlof
 
Ich glaub ich muss mir mal die Cronjob geschichten anschauen, aber dein Beispiel mit der mysql Tabelle habe ich leider auch nicht nachvollziehen können.

Mein Code sieht übrigens so aus:

PHP:
<?php
$arr[] = '<li><a href="linkadresse.html">Linktext</a></li>';
$arr[] = '<li><a href="linkadresse.html">Linktext</a></li>';
$arr[] = '<li><a href="linkadresse.html">Linktext</a></li>';

$shuffle($arr);

echo '<ul>';

for($i=0; $i < 2; $i++) {
echo $arr[$i];

}

echo '</ul>';
 
Das srand() kannte ich ja noch gar nicht , ich denke aber dafür muss man das Scritp dann ebenfalls aufrufen mittels cronjob oder der erste Nutzer der kommt.

Was ich mal vor einiger Zeit im jugendlichen Leichtsinn verbrochen habe ist ähnlich. Zwar ging es da um ein neuen Satz jeden Tag aber das sollte ja das gleiche sein im Endeffekt.

Im Prinzip habe ich mir eine Textdatei angelegt mit dem aktuellen Timestamp.Und immer wenn wer das Script aufruft wird überprüft ist der aktuelle Timestamp noch der aktuelle Tag oder ist er bereits vorbei. Wenn er vorbei war wurde die Datei neu geschrieben.

Die Auswahl hab ich mir immer aus einer Textdatei gefischt die ich mittels file() in ein Array eingelesen habe.
Das wäre das gleiche wie mit der Datenbank und mittels Cronjob kann man dieses dann halt automatisieren , in dem er automatisch 0:01 dieses Script startet.

PHP:
<?php 

/** 
* Jeden Tag ein neues Wort oder Satz ausgeben 
*/ 

Class DatumSetzen extends Weisheit{ 

    var $morgen; 
    var $DateWeisheitFile = "Files/Weisheit.txt"; // Datei wo die Weisheit 
                                                  // gespeichert wird 

    function Datum(){ 
      $this->setDate(); 
      $this->Weisheit(); 
      $this->writeMessage(); 
      $this->printMessage($this->Weisheit); 
    } 

    /** 
    * Datum festlegen 
    * time()+60*60*24 der nächste Tag 
    */ 

    /**************************************************************************/ 
     
    function SetDate(){ 
       $this->morgen = mktime(0,0,0,date("n"),date("j"),date("Y")) + (60*60*24); 
    } 
     
    /**************************************************************************/ 
     
    function writeMessage(){ 
        $inhalt = $this->morgen."¥".$this->Weisheit;   // neuen Inhalt festlegen 
        $dt     = fopen($this->DateWeisheitFile,"w+"); // Datei öffnen 
                  fwrite($dt,$inhalt);                 // neuen Inhalt schreiben 
                  fclose($dt);                         // Datei schliessen 
                  chmod("Files/Weisheit.txt",0777);    // Rechte auf 0777 setzen 
    } 
     
    /**************************************************************************/ 
     
    function printMessage($weisheit){ 
       echo $weisheit;                                  // Die Weisheit ausgeben 
    } 
} 

Class Weisheit{ 

   var $Message_File = "Files/Weisheiten.txt"; 
   var $Weisheiten; 
   var $Weisheit; 
    
   function Weisheit(){ 
     /** 
     * Datei einlesen und zeilenweise in ein Array zerlegen 
     * Zufallsschlüssel ausgeben 
     */ 
        $this->Weisheiten = file($this->Message_File); 
        $this->Weisheit =  $this->Weisheiten[rand(0,count($this->Weisheiten)-1)]; 
   } 
} 

if(is_file("Files/Weisheit.txt")){                       // wenn Datei existiert 

      /** 
      * Inhalt der Weisheit.txt 
      * timestamp¥Message 
      * lies 1 Zeile eine 
      * zerlegen 
      * und Timestamp vergleichen 
      */ 
      $file = file("Files/Weisheit.txt");               // Datei wo die Weisheit 
                                                        // gespeichert ist 
                                                         
      $file = explode("¥",$file[0]);                    // Inhalt zerlegen 
                                                        // timestamp¥Weisheit 
        /** 
        * Ist das Datum von morgen bereits erreicht oder kleiner neu schreiben 
        */ 
        if($file[0] <= mktime(0,0,0,date("n"),date("j"),date("Y"))){ 
            $Weisheit = new DatumSetzen;                 
            $Weisheit->Datum(); 
        /** 
        * ansonsten gib die aktuelle Nachricht aus 
        */ 
        }else{ 
            $Weisheit = new DatumSetzen; 
            $Weisheit->printMessage($file[1]); 
        } 
}else{    
   $Weisheitneu = new DatumSetzen; 
   $Weisheitneu->Datum(); 
}
 
GarGod hat gesagt.:
Ja da hast du recht, das würde nur funktionieren, wenn jemand wirklich genau zu dieser Sekunde die Seite aufruft.
Schau dir mal dieses Tutorial an:
http://www.tutorials.de/forum/php-t...atischer-crown-job-ohne-server-crown-job.html
habs zwar gerade nur überflogen, aber da steht glaub ich ungefähr das drin, was ich eben auch in meinem Bsp. erklären wollte.
Grüße.

Als Cronjob hab ich das nun natürlich noch gar nicht gesehen , man würde eher sagen ein Cronjob für Arme ;)
Aber wenn man zu Hause Linux am laufen hat , könnte man sich ja einen Cronjob dort einrichten der dann einmal am Tag auf den Server zugreift und es startet.
Des weiteren würde ich mein Script auch nicht mehr so nutzen , wenn dann wie gesagt über die Datenbank , weil es wesentlich schneller ist und nicht bei 2 nutzern die gleichzeitig in der selben Sekunde kommen zusammenbricht :) Die Wahrscheinlichkeit ist wohl nicht sehr hoch , aber sie ist da.
 
Naja ich kenn nun wie gesagt die Funtion srand() nicht , laut Manual startet es rand() nach einer gewissen Zeit seit PHP 4.02 ist dieses nicht mehr nötig.

Somit komm ich da nun ein wenig durcheinander und müsste auch erstmal experimentieren damit um zu sehen was nun genau da klappt und wie es klappt. Das man das Script startet und nach 10 sekunden startet dann das shuffle kann ich mir nicht so richtig vorstellen momentan.

Da ein PHP Script nach meinen Wissen erstmal vom Server verarbeitet wird , und dann kommen die ganzen Ausgaben.
Wobei ich da auch sagen würde , das einer kommen muss um das Script zu starten oder das eben mittels Cronjob dann erledigt.Von daher bin ich da etwas verwirrt momentan :/.
 
Zurück