Ankündigung

Einklappen
Keine Ankündigung bisher.

Zufallsbild aber mit Reload

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zufallsbild aber mit Reload

    Hallöschen

    Ich bin nun 2 Tage schon nach einer Lösung an Googel 200 und mehr Seiten durch aber ich komm nicht drauf.

    Struktur

    1.Zeigmich.php = Aufruf Seite
    2.zeigmich.php mit <?php include("hier sind die Bilder.php");?>
    3.Zufalls Bilder werden wunderbar angezeigt

    Code für die Zufalls Bilder
    PHP-Code:
    <?php
    $root 
    './ordnervonmir/';
    $od opendir($root);
    $dir_arr = array();
    $files = array('jpg','gif');

    while(
    $obj readdir($od)){
      if(!
    preg_match('/^\.{1,2}$/',$obj) && is_dir($root.'/'.$obj)){
        
    $dir_arr[] = $obj;
      }else{
        continue;
      }
    }
    closedir($od);

    $number array_rand($dir_arr);
    $path $root.'/'.$dir_arr[$number];
    $od opendir($path);
    $file_arr = array();
    while(
    $obj readdir($od)){
      if(!
    preg_match('/^\.{1,2}$/',$obj) && is_file($path.'/'.$obj) && in_array(strtolower(substr($obj,strrpos($obj,'.')+1)),$files)){
        
    $file_arr[] = $obj;
      }else{
        continue;
      }
    }
    $number array_rand($file_arr);
    printf('<center><img src="%s/%s" alt="%s" title="%s" border="0" /></center>',$path,$file_arr[$number],$file_arr[$number],$file_arr[$number]);
    ?>
    jetzt möchte ich aber das auf die Bilder eine Reload Zeit kommt

    Ich habe folgendes Ausprobiert habe die ganze zeigmich.php mit folgendem Php gesetzt
    PHP-Code:
    <?php
    function ReloadSperre()
    {
        
    // Dauer der Sperre in Sekunden
        
    $sperrZeit 3600// 3600 = 1 Stunde
        
    $dateiname "reload.txt";
        
    // Zeit bis Sperre abgelaufen
        
    $reloadZeit 0;
        
    // IP-Adresse
        
    $ip $_SERVER['REMOTE_ADDR'];
        
    // aktuelle Zeit
        
    $zeit time();
        
    $datei file($dateiname);
        
    // Datei durchlaufen und auf Sperren prüfen
        
    for($i 0$i sizeof($datei); $i++)
        {
            
    $eintrag explode("|"$datei[$i]);
            
    // Sperre aktiv?
            
    if($eintrag[0] > $zeit $sperrZeit)
            {
                
    // gleiche IP?
                
    if(trim($eintrag[1]) == $ip)
                {
                    
    // Restdauer der Sperre berechnen
                    
    $reloadZeit $sperrZeit - ($zeit $eintrag[0]);
                }
                
    // Zeile wieder dem Dateiinhalt hinzufügen
                
    $neuerInhalt .= $datei[$i];
            }        
        }
        
    // Keine Sperre => neuen Eintrag erzeugen
        
    if($reloadZeit == 0)
            
    $neuerInhalt .= $zeit."|".$ip."\n";
        
    // Daten in Datei speichern
        
    $handle fopen($dateiname"w");
        
    fwrite($handle$neuerInhalt);
        
    fclose($handle);
        
    // Restzeit zurückgeben
        
    return $reloadZeit;
    }
    // Beispielaufruf
    $reload ReloadSperre();
    if(
    $reload 0)
        echo 
    "Reloadsperre noch ".sprintf("%02d:%02d:%02d",
            
    $reload 60 60, ($reload 60) % 60$reload 60)." aktiv";
    else
        echo 
    "Keine Reloadsperre";
    ?>
    Macht er auch wunderbar ABER!!! die Bilder werden immer noch im Wechsel angezeigt bei jedem F5 getestet mit Mozilla.

    kann ich auf 
    [php]$number = array_rand($file_arr);
    printf('<center><img src="%s/%s" alt="%s" title="%s" border="0" /></center>',$path,$file_arr[$number],$file_arr[$number],$file_arr[$number]);
    ?>
    ürgenteinen Reload oder Time sperre machen?
    [/php]

  • #2
    Hi,

    willst Du, dass sich die Seite "automatisch neulädt"? Dann arbeite doch mit AJAX. JavaScript Teil könnte so aussehen:

    PHP-Code:
    <script language="javascript">
    var 
    http_request false;

    function 
    load_data(str) {
        
    http_request false;
        if (
    window.XMLHttpRequest) {
            
    http_request = new XMLHttpRequest();
        } else if (
    window.ActiveXObject) {
            try {
                
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (
    e) {
                try {
                    
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (
    e) {}
            }
        }
        if (!
    http_request) {
            
    alert('Finito - kann dummerweise keine XMLHTTP-Instanz erzeugen');
            return 
    false;
        }
        
    document.getElementById("idmeinesDivFeldes").style.display='';
        
    http_request.open('GET''meinePHPDatei.php'true);
        
    http_request.onreadystatechange InhaltPost;
        
    http_request.send(null);
    }
     
    function 
    InhaltPost() {
        if (
    http_request.readyState == 4){
            var 
    answer http_request.responseText;
            if(
    document.getElementById("idmeinesDivFeldes").innerHTML != answer){
                
    document.getElementById("idmeinesDivFeldes").innerHTML answer;
            }
        }
    }

    window.onload "load_data()";
    interval window.setInterval("load_data();"5000); 
    </script>

    <body onload='load_data();'>

    ...blablabla....
    <div id="idmeinesDivFeldes"></div>
    ...
    </body> 
    als grobes Beispiel. In deiner PHP Datei holst du dein zufälliges Bild.

    mfg Wolf29

    Kommentar


    • #3
      Das ist schonmal ein guter Ansatz.Aber die zeigmich.php wird immer per Aufruf von einem Link aus geladen oder per Refresh

      Das heisst.. user besucht Seite Bild kommt(aus$root = './ordnervonmir/'
      User möchte sein Glück nochmal versuchen
      Drückt auf Seite neu laden

      PHP-Code:
      $reload ReloadSperre();
      if(
      $reload 0)
          echo 
      "Reloadsperre noch ".sprintf("%02d:%02d:%02d",
              
      $reload 60 60, ($reload 60) % 60$reload 60)." aktiv";
      else
          echo 
      "Keine Reloadsperre"
      reload Sperre Aktiv

      Ich hoffe man versteht wie ich das meine

      Kommentar


      • #4
        Ich hoffe man versteht wie ich das meine
        Ne Ist das deine Frage??

        http://www.zdnet.de/magazin/20000913...verhindern.htm

        mfg Wolf29

        Kommentar


        • #5
          Jetzt wird es Kompliziert die Richtung ist Richtig aber im $token kann ich keine Zeit einstellen ich will ja das

          die Bilder aus dem Ordner $root = './ordnervonmir/

          wieder nach einer bestimmten Zeit zu sehen sind

          Kommentar


          • #6
            Ok, dann nimm doch Cookies!

            mfg Wolf29

            Kommentar


            • #7
              Ich denke mal hier soll es eher darum gehen, dass eben nicht andauernd das Bild geändert wird, sondern es für eine IP-Adresse eine gewisse zeit gleich bleibt.
              Da fallen mir jetzt auf Anhieb 3 Möglichkeiten ein:
              Möglichkeit 1: Du arbeitest mit Sessions/Cookies und speichertstdort ab, wann welches Bild zuletzt angezeigt wurde.
              Nachteil ist, dass du Cookies setzt, die der Anwender natürlich auch löschen kann.
              Möglichkeit 2: Du machst das so, wie bisher, dass du eine Textdatei/Datenbank benutzt.
              Schau mal bei dir, was wirklich in der Datei landet.
              Möglichkeit 3: Du wechselst für jeden User das Bild immer zur vollen Stunde mit etwa folgendem Code:
              PHP-Code:
              $randnum hexdec(md5($_SERVER['REMOTE_ADDR'] .date('ymdH')));
              $bildnr $randnr $anzahl_bilder
              Ich weiß nicht genau wie PHP mit Zahlen umgeht, die zu groß sind, vielleicht muss man auch nur 8 Zeichen von dem MD5-Hash zur Zufallszahl machen, falls $randnum immer gleich bleibt.

              Kommentar


              • #8
                hmm ok ich habe nun in der meinebilder.php empfohlenen Code eingesetzt


                jetzt kommt wahrscheinlich der Hash Fehler von der Grösse her

                "i Warning: Division by zero in /var/customers/webs/web14/members/meinebilder.php on line 28"

                Line 28 =
                PHP-Code:
                26.}
                27.$randnum hexdec(md5($_SERVER['REMOTE_ADDR'] .date('ymdH')));
                28.$bildnr $randnr $anzahl_bilder;
                $number array_rand($file_arr);
                printf('<center><img src="%s/%s" alt="%s" title="%s" border="0" /></center>',$path,$file_arr[$number],$file_arr[$number],$file_arr[$number]);
                ?> 

                Kommentar


                • #9
                  Jetzt versuchst du erst mal zu verstehen, was der Code da macht und dann überlegst du dir woher der Fehler da kommt und wie man den Code richtig einbauen kann, bzw. was er am Ende liefert.
                  Es ist sicherlich nicht der Hash. Der darf jederzeit Null sein.

                  Kommentar


                  • #10
                    Oki das hat schonmal ein wenig hingehauen er hält auch ein paar Sec. das nächste Bild an soweit habe ich es aber ich denke ich habe den Code immer noch falsch

                    PHP-Code:
                    $number array_rand($dir_arr);
                    $randnum hexdec(md5($_SERVER['REMOTE_ADDR'] .date('ymdH')));
                    $bildnr $randnr [$anzahl_bilder];
                    $path $root.'/'.$dir_arr[$number];
                    $od opendir($path);
                    $file_arr = array();
                    while(
                    $obj readdir($od)){
                        if(!
                    preg_match('/^\.{1,2}$/',$obj) && is_file($path.'/'.$obj) && in_array(strtolower(substr($obj,strrpos($obj,'.')+1)),$files)){
                            
                    $file_arr[] = $obj;
                        }else{
                            continue;
                        }
                    }
                    $number array_rand($file_arr);
                    printf('<center><img src="%s/%s" alt="%s" title="%s" border="0" /></center>',$path,$file_arr[$number],$file_arr[$number],$file_arr[$number]);
                    ?> 

                    Kommentar


                    • #11
                      Du hast den Code noch überhaupt nicht verstanden.
                      Jegliche array_rand() Aufrufe werde hinfällig, wenn du den Code erst mal verstanden hast, da er dir ja schon einen "zufälligen" Wert liefert.
                      Auch das entfernen von ehmals Zeile 28 behebt zwar den Fehler, trotzdem gehört da etwas in der Art rein.

                      Kommentar


                      • #12
                        Zitat von ChrisvA Beitrag anzeigen
                        PHP-Code:
                        $randnum hexdec(md5($_SERVER['REMOTE_ADDR'] .date('ymdH')));
                        $bildnr $randnr $anzahl_bilder
                        Ich weiß nicht genau wie PHP mit Zahlen umgeht, die zu groß sind, vielleicht muss man auch nur 8 Zeichen von dem MD5-Hash zur Zufallszahl machen, falls $randnum immer gleich bleibt.
                        Man sollte im int-Bereich bleiben, besser crc32 anstelle md5.
                        Den Code hat Buffyison ohne zu überlegen incl. Tippfehler übernommen.
                        $randnum - $randnr

                        Kommentar


                        • #13
                          Anmerkung zu Multipostings
                          http://phpforum.de/forum/showthread.php?t=269183

                          Gruß Jens

                          Kommentar


                          • #14
                            Zitat von jspit Beitrag anzeigen
                            Man sollte im int-Bereich bleiben, besser crc32 anstelle md5.
                            Den Code hat Buffyison ohne zu überlegen incl. Tippfehler übernommen.
                            $randnum - $randnr
                            Das mit dem Int-bereich hatte ich schon befürchtet, aber crc32 kannte ich nicht nicht. Danke für den Hinweis.
                            Dachte mir aber, dass er alles was zu groß wird einfach abschneidet wie in C++, aber PHP tick ja meist ein bisschen anders.

                            Kommentar


                            • #15
                              Bitte beachten: Anmerkungen zu Crosspostings

                              [MOD: Thread geschlossen]

                              Kommentar

                              Lädt...
                              X