Visualizzazione risultati 1 fino 7 di 7

Discussione: [php] Immagine Random solo con aggiornamento pagina, perchè?

  1. #1
    Guest

    Predefinito [php] Immagine Random solo con aggiornamento pagina, perchè?

    Salve a tutti!

    Ho usato il seguente script:

    Codice PHP:
    <?
    header
    ("Content-Type: image/jpeg");

    $immagini=array("logo1.jpg","logo2.jpg","logo3.jpg","logo4.jpg","logo5.jpg");

    $logo=imagecreatefromjpeg($immagini[rand(0,count($immagini)-1)]);
    imagejpeg($logo);
    ?>
    Per generare casualmente uno dei 5 loghi del mio sito, ho messo l'url a questo file tra i tag img nella giusta posizione dell'eheader che ha sua volta ho incluso con la funzione include. Ora il mio problema e che la nuova immagine viene stampata solo se aggiorno la pagina, se cambio pagina e l'aggiorno cliccando su vai o sul suo percosso, l'immagine resta l'ultima generata, e viene ricaricata e modificando solo con ctrl+f5 (aggiorna). C'è un modo, sempre in php (vorrei evitare il js e il codice per farlo in js già l'ho), per correggere questo errore?

    Grazie!
    Ultima modifica di morgensterngdr : 22-06-2009 alle ore 12.52.12

  2. #2
    Guest

    Predefinito

    Codice PHP:
    $folder = '.';
    $extList = array();
    $extList['gif'] = 'image/gif';
    $extList['jpg'] = 'image/jpeg';
    $extList['jpeg'] = 'image/jpeg';
    $extList['png'] = 'image/png';

    $img = null;

    if (
    substr($folder, -1) != '/')
    {
    $folder = $folder . '/';
    }

    if (isset(
    $_GET['img']))
    {
    $imageInfo = pathinfo($_GET['img']);
    if ( isset(
    $extList[strtolower($imageInfo['extension'])]) && file_exists($folder . $imageInfo['basename']) )
    {
    $img = $folder . $imageInfo['basename'];
    }
    }
    else
    {
    $fileList = array();
    $handle = opendir($folder);
    while (
    false !== ($file = readdir($handle)) )
    {
    $file_info = pathinfo($file);
    if ( isset(
    $extList[strtolower($file_info['extension'])]))
    {
    $fileList[] = $file;
    }
    }
    closedir($handle);

    if (
    count($fileList) > 0)
    {
    $imageNumber = time() % count($fileList);
    $img = $folder . $fileList[$imageNumber];
    }
    }

    if (
    $img != null)
    {
    $imageInfo = pathinfo($img);
    $contentType = 'Content-type: ' . $extList[$imageInfo['extension']];
    header ($contentType);
    readfile($img);
    }
    else
    {
    if (
    function_exists('imagecreate'))
    {
    header("Content-type: image/png");
    $im = @imagecreate(100, 100) or die("Cannot initialize new GD image stream");
    $background_color = imagecolorallocate($im, 255, 255, 255);
    $text_color = imagecolorallocate($im, 0, 0, 0);
    imagestring($im, 2, 5, 5, "IMAGE ERROR", $text_color);
    imagepng($im);
    imagedestroy($im);
    }
    }
    ?>
    Metti il file nella stessa cartella di dove ci sono le immagini e mostrerà in random le immagini.


  3. #3
    Guest

    Predefinito

    probabilmente non si aggiorna perchè l'src dell'immagine (cioè il file php che genera il logo) rimane sempre lo stesso e quindi il browser utilizza quella in cache.

    Prova un pò questo semplice codice:

    Codice PHP:
    //Definiamo il percorso della cartella contenente le immmagini
    $path="images/";

    //Stabiliamo le immagini
    $immagini=array("logo1.jpg","logo2.jpg","logo3.jpg","logo4.jpg","logo5.jpg");

    //Genera l'immagine casualmente
    echo '<img src="'.$path.$immagini[array_rand($immagini)].'" alt="" />';
    modifica le impostazioni e prova a metterlo direttamente al posto del logo.
    Ultima modifica di piroteca : 22-06-2009 alle ore 13.38.08

  4. #4
    Guest

    Predefinito

    Basta impostare correttamente gli headers evitando di utilizzare la cache!
    Codice PHP:
    <?php
    header
    ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("Content-Type: image/jpeg");

    $immagini = array("logo1.jpg","logo2.jpg","logo3.jpg","logo4.jpg","logo5.jpg");

    $logo = imagecreatefromjpeg($immagini[rand(0,count($immagini)-1)]);
    imagejpeg($logo);
    imagedestroy($logo);
    ?>

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da piroteca Visualizza messaggio
    probabilmente non si aggiorna perchè l'src dell'immagine (cioè il file php che genera il logo) rimane sempre lo stesso e quindi il browser utilizza quella in cache.

    Prova un pò questo semplice codice:

    Codice PHP:
    //Definiamo il percorso della cartella contenente le immmagini
    $path="http://forum.it.altervista.org/images/";

    //Stabiliamo le immagini
    $immagini=array("logo1.jpg","logo2.jpg","logo3.jpg","logo4.jpg","logo5.jpg");

    //Genera l'immagine casualmente
    echo '<img src="'.$path.$immagini[array_rand($immagini)].'" alt="" />';
    modifica le impostazioni e prova a metterlo direttamente al posto del logo.
    Vorrei evitare di metterlo in loco, perchè è una cosa che vorrei utilizzare anche esternamente un giorno

    Citazione Originalmente inviato da nokiagames Visualizza messaggio
    Basta impostare correttamente gli headers evitando di utilizzare la cache!
    Codice PHP:
    <?php
    header
    ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("Content-Type: image/jpeg");

    $immagini = array("logo1.jpg","logo2.jpg","logo3.jpg","logo4.jpg","logo5.jpg");

    $logo = imagecreatefromjpeg($immagini[rand(0,count($immagini)-1)]);
    imagejpeg($logo);
    imagedestroy($logo);
    ?>
    Sto provando questo e ti faccio sapere se funziona, mi togli una curiosita, i primi due header e imagedestriy che cosa sono?
    EDIT: Funziona e non so perchè ma carica il tutto ad una velocità che non è normale, tipo mezzo secondo, grazie mille.
    Ultima modifica di morgensterngdr : 22-06-2009 alle ore 16.36.24

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    EDIT: Funziona e non so perchè ma carica il tutto ad una velocità che non è normale, tipo mezzo secondo, grazie mille.
    Se elimini il salvataggio in cache è normale che sia più veloce...
    Ciao!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Se elimini il salvataggio in cache è normale che sia più veloce...
    Ciao!
    Lo devo disabilitare per tutta la pagina visto la velocità con qui carica i loghi
    Ovviamente scherzo, comunque grazie a tutti, al prossimo dubbio
    Ultima modifica di morgensterngdr : 22-06-2009 alle ore 16.45.29

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •