Errore nel creare miniature da immagini caricate su un mio form

Jam1

Nuovo Utente
11 Dic 2011
9
0
0
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 altro 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));


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

In vision.php richiamo le miniature in questo modo:

PHP:
	echo '<img src="thumb.php?id_file=' . $row['id_file'] . '" alt="' . $row['id_file'] . '" /> 
<br /><br /><br />';


e vorrei aggiungere, se può essere utile ora, tutto lo script in questione, ovvero:

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';	
?>

<!-- apertura del div centrale --> 
	<div id="centrale">

<?php
	
	try
		{	
			// Report all PHP errors
			error_reporting(-1);
							
			$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::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 '<br /><br />Le tue immagini:' . '&nbsp; &nbsp; <a href="upload.php">Torna indietro</a><br /><br />'; 

							echo '<img src="thumb.php?id_file=' . $row['id_file'] . '" alt="' . $row['id_file'] . '" /> 
<br /><br /><br />';
									 	
 						} 
 													
 					while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ); 				
 				}
 			else
 				{
 					echo '<br /><br /> <div class="centra">Ciao, ' . $_SESSION['username'] . ', non hai inviato per ora nessuna immagine.
<br /><br /> <a href="upload.php">Inviami un\'immagine, se lo desideri</a></div>';

					include 'footer.php';
					exit;
 				}

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

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


mentre ecco il codice di thumb.php:

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_ERRMODE, PDO::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']);
                                        
                                     // provo a caricare un'immagine jpeg, ma ottengo un errore che registro sul file error_log di Apache
					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, $image, 0, 0, 0, 0, $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($thumb, NULL, 80);      		
      				
			// distruggo la thumbnail per liberare memoria del server
			imagedestroy($thumb); 
			
		} // fine blocco try {}
	catch (PDOException $e)
		{
			echo "Error!: " . $e->getMessage() . "<br />";
			die;		
		}	

?>



Aggiungo che la cartella uploaded,( quella dove gli utenti caricano le immagini) ha al suo interno le foto/immagini caricate e rinominate correttamente.
Infatti sul db da phpMyAdmin vedo in modo esatto 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.
 

Discussioni simili