Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Errore nel creare miniature da immagini cariate da un mio form

    Ciao a tutti,

    Ecco il mio problema.
    Vorrei creare una gallery con delle miniature (thumbnails) dalle foto/immagini che i vari utenti possono caricare da un form sul mio sito.

    Dopo i controlli sul file caricato, la pagina, alla quale dopo il login (uso le sessioni) ogni singolo utente può accedere, che dovrebbe contenere la gallery con le miniature create 'al volo' con PHP che ho chiamato vision.php non funziona a dovere.

    Questa vision.php richiama a sua volta un mio nuovo script che dovrebbe crearle appunto 'on the fly', ma dove sbaglio evidentemente qualcosa.... Questo script si chiama thumb.php.

    Mi sono creato in precedenza una tabella sul mio db MySQL, così:

    CREATE TABLE uploaded (id_file INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, url_file VARCHAR(50) NOT NULL, nome_file VARCHAR(100) NOT NULL, tipo_file VARCHAR(20) NOT NULL, descrizione VARCHAR(255), note TEXT, data_inserimento DATETIME NOT NULL, indirizzo_IP CHAR(15) NOT NULL, username VARCHAR(20) NOT NULL, id_user INT(11) NOT NULL, PRIMARY KEY(id_file));

    Ma da vison.php riesco ad estrarre solo i nomi dei files caricati con le loro estensioni ma non, come dovrei, le miniature o thumbnails!!!.

    In vision.php richiamo le miniature in questo modo:

    Codice PHP:

    <?php
        
    //continuo la sessione
        
    session_start();

        require_once 
    'config_db.php';              
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">   
    <head>
    <?php
        
    include 'header.html';
    ?>
     
     <title>Visualizzazione</title>  
    </head>

    <body class="no-js">
    <?php
        
    require 'sessione_loggati.php';    
    ?>

     
        <div id="centrale">

    <?php
        
        
    try
            {    
                
    // Report all PHP errors
                
    error_reporting(-1);
                                
                
    $pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION); 
                
                
    $stmt $pdo->prepare("SELECT * FROM uploaded WHERE id_user = ? ORDER BY id_file");
        
                
    // L'utente correttamente loggato cerca un file, uso le sessioni!
                
    $stmt->execute(array($_SESSION['id_user']));
         
                 if ( 
    $row $stmt->fetch(PDO::FETCH_ASSOC) )
                     {     
                         
    // Qui uso un ciclo do/while
                         
    do
                             {
                                 echo 
    '

    Le tue immagini:' 
    '  [url="upload.php"]Torna indietro[/url]

    '
    ;         
         
                                echo 
    '[img]thumb.php?id_file=' $row['id_file'] . '[/img] 



    '
    ;
                                             
                             } 
                                                         
                         while ( 
    $row $stmt->fetch(PDO::FETCH_ASSOC) );                 
                     }
                 else
                     {
                         echo 
    '

     <div class="centra">Ciao, ' 
    $_SESSION['username'] . ', non hai inviato per ora nessuna immagine.


     [url="upload.php"]Inviami un\'immagine, se lo desideri[/url]</div>'
    ;

                        include 
    'footer.php';
                        exit;
                     }

            } 
    // fine blocco try {}
        
    catch (PDOException $e)
            {
                echo 
    "Error!: " $e->getMessage() . "
    "
    ;
                die;        
            }    
                
    ?>

    <?php
        
    include 'footer.php';                        
    ?>

    mentre ecco il codice di thumb.php

    Codice PHP:

    <?php
         
    // imposto gli header correttamente per avere una thumbnail SEMPRE in jpeg
        
    header('Content-type: image/jpeg'); 
        
        
    //continuo la sessione
        
    session_start();
        
        require_once 
    'config_db.php';
        
            
        try
            {
                
    //chmod("./uploaded/", 0777);
            
                // Report all PHP errors
                
    error_reporting(-1);
            
                
    $pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);         
                
                
    // estraggo il nome e l'estensione dell'immagine    
                
    $stmt $pdo->prepare("SELECT nome_file, tipo_file FROM uploaded WHERE id_file = ? ");
        
                
    // Passo il parametro della querystring contenuto in vision.php
                
    $stmt->execute(array($_GET['id_file']));
                
                
    $row $stmt->fetch(PDO::FETCH_ASSOC);                    

                switch (
    $row['tipo_file']) 
                    {
                        case 
    'png':                        
                        
    // estraggo i dati da un'immagine png
                        
    $image imagecreatefrompng('uploaded/' $row['nome_file'] . '.' $row['tipo_file']);
                        break;    

                        case 
    'jpg' || 'jpeg'
                        
    $image imagecreatefromjpeg('uploaded/' $row['nome_file'] . '.' $row['tipo_file']);
                        
    error_log("Miniatura NON creata, errore"0);
                        break;
                    
                        case 
    'gif':
                        
    $image imagecreatefromgif('uploaded/' $row['nome_file'] . '.' $row['tipo_file']);
                        break;    
                    
                        default:            
                        die(
    'Impossibile rilevare il formato dell\'immagine');        
                    }                
                
                
    $width imagesx($image); // estraggo la width dell'immagine originale
                
    $height imagesy($image); // estraggo la height dell'immagine originale
                
                // Definisco una dimensione della thumbnail di 250px, intesa come
                // dimensione del lato maggiore dell'immagine.
                
    $thumbsize 250;
        
                
    // Calcolo ora un coefficiente di proporzione tale per cui il 
                // lato maggiore diventi 250, per farlo basta dividere la
                // dimensione che desidero con la dimensione di ciascuno dei due lati 
                // dell'immagine originale, e scegliere il risultato minore
                // con la funzione min()    
                
    $perc min($thumbsize $width$thumbsize $height);
        
                
    // Ora $perc conterrà il coefficiente che moltiplico 
                // per ciascuno dei lati dell'immagine a dimensione 
                // reale, ottenendo le dimensioni della thumbnail.
                
    $thumb_width intval($perc $width);
                
    $thumb_height intval($perc $height);        
                    
                
    // creo la thumbnail con i nuovi parametri 
                
    $thumb imagecreatetruecolor($thumb_width$thumb_height); 
                        
                
    // infine copio l'immagine originale in questa nuova immagine, cioè nella thumbnail
                // con la funzione specifica per i ridimensionamenti imagecopyresampled()
                
    imagecopyresampled($thumb$image0000$thumb_width$thumb_height$width$height);
                
                
    // imposto anche la qualità a 80%, predefinita è a 75%: maggiore è  
                // la qualità che si vuole ottenere maggiore è anche il peso della 
                // della thumbnail e viceversa.
                          
    imagejpeg($thumbNULL80);             
                
                
    // distruggo la thumbnail per liberare memoria del server
                
    imagedestroy($thumb); 
                
            } 
    // fine blocco try {}
        
    catch (PDOException $e)
            {
                echo 
    "Error!: " $e->getMessage() . "
    "
    ;
                die;        
            }    

    ?>

    Aggiungo che la cartella uploaded ha al suo interno le foto/immagini caricate e rinominate correttamente.
    Infatti sul db da phpMyAdmin vedo correttamente i dati inseriti.
    Ripeto che la fase di upload funziona perfettamente, ma non riesco ad ottenere queste thumbnails.

    Grazie in anticipo e un saluto a tutti.
    Ciao.

  2. #2
    Nessuno ha una qualche idea per aiutarmi?

    Ciao e grazie in anticipo.

  3. #3
    se provi ad mettere i quote durante l'upload??

    http://it1.php.net/manual/en/function.addslashes.php

    inoltre, non è una critica, ma secondo me dovresti ripensare questa applicazione, nel senso così ogni volta che carichi la pagina sprechi un sacco di risorso per creare le miniatura, ma a rigor di logica secondo me ti conviene creare la miniatura in fase di upload e poi salvarla sul disco, quando ti serve le richiami direttamente dal disco no??

    notavo anche questo:

    case 'jpg' || 'jpeg':

    solitamente per fare un multi case si fa così:
    case 'jpg':
    case 'jpeg':
    funzione bla bla;
    break;
    ....


    su questo tipo di funzione:

    imagecreatefromgif('uploaded/'....

    proverei a mettere un path migliore, qualcosa del genere ./uploaded/

    E' tutto un po' complicato soprattutto da capire, vedi se i miei consigli ti servono in qualche modo...

  4. #4
    Ciao e grazie per la tua risposta,

    Ho provato a seguire le tue indicazioni, ma nulla da fare.
    Però nel file error_file contenuto nella directory /opt/lampp/logs vedo questo errore:

    Wed Jun 26 19:37:34.279824 2013] [:error] [pid 2933] [client 127.0.0.1:43215] PHP Warning: imagecreatefromjpeg(uploaded/046ccd6f930959786f71447f2ecf228d814481eb40481889d9 ea619191a153cb12f585bbae867a66.jpeg): failed to open stream: No such file or directory in /opt/lampp/htdocs/new_site_local/thumb.php on line 35, referer:[http://localhost/new_site_local/vision.php]
    [Wed Jun 26 19:37:34.279915 2013] [:error] [pid 2933] [client 127.0.0.1:43215] PHP Warning: imagesx() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/new_site_local/thumb.php on line 47, referer:[ http://localhost/new_site_local/vision.php]
    [Wed Jun 26 19:37:34.279938 2013] [:error] [pid 2933] [client 127.0.0.1:43215] PHP Warning: imagesy() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/new_site_local/thumb.php on line 48, referer: [http://localhost/new_site_local/vision.php]
    [Wed Jun 26 19:37:34.279961 2013] [:error] [pid 2933] [client 127.0.0.1:43215] PHP Warning: Division by zero in /opt/lampp/htdocs/new_site_local/thumb.php on line 59, referer:[http://localhost/new_site_local/vision.php]

    ecc.


    Non so come rimediare.
    Grazie per il tuo interessamento e spero tu mi possa aiutare.
    Ciao.

  5. #5
    Nessuno ha qualche idea?
    Grazie e ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.