- Home
- Categorie
- Coding e Sistemistica
- PHP
- immagini in php
-
immagini in php
Dopo aver creato una tabella con la seguente query:
create table file_upload (id int(11) UNSIGNED NOT NULL auto_increment, bin_data blob, filename varchar(150) default NULL
, filesize varchar(50) default NULL, filetype varchar(50) default NULL, width int(4) default NULL,
height int(4) default NULL , thumb mediumblob NOT NULL, PRIMARY KEY (id)) TYPE=MyISAM;Immetto in essa le immagini e le relative informazioni richieste dai campi con i seguenti due script:
upload.htm
<html>
<head>
<title>PHP Professionale</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="formUpload" enctype="multipart/form-data" method="post" action="upload02.php">
<p>
<input name="fileUP" type="file" id="fileUP">
</p>
<p>
<input type="submit" name="Submit" value="Invia">
</p>
</form>
</body>
</html>il quale una volta immesso l'indirizzo dell' immagine e cliccato sul pulsante invia mi mostra in una nuova pagina chiamata upload2.php l'anteprima dell'immagine e carica i dati sul DB :
upload02.php :
<?php
// se riceviamo i dati dal form
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_FILES['fileUP'] > 0 )
$fileName = $_FILES['fileUP']['name'];
$tmpName = $_FILES['fileUP']['tmp_name'];
$fileSize = $_FILES['fileUP'];
$fileMimeSize = $_FILES['fileUP']['type'];
// Ricaviamo le informazioni sull'immagine
list($width,$height,$type,$attr) = getimagesize( $_FILES['fileUP']['tmp_name']);
// controlliamo che il lato maggiore dell'immagine non superi i 640 pixel
if(($width > 640 ) || ($height > 640))
{$msg = "<p>Immagine di dimensione superiori al consentito<</p>";}
// in base al tipo di immagine creiamo un tipo temporanea del tipo corretto
switch ($type){
case 1: // gif
$img_in=imagecreatefromgif($tmpName) or die ("impossibile creare l'immagine");
if(!isset($extension))
{$extension = "jpg";}
break;
case 2: // jpg
$img_in=imagecreatefromjpeg($tmpName) or die ("impossibile creare l'immagine");
if(!isset($extension))
{$extension = "jpg";}
break;
case 3: // png
$img_in=imagecreatefrompng($tmpName) or die ("impossibile creare l'immagine");
if(!isset($extension))
{$extension = "png";}
break;
default:
die("impossibile creare l'immagine");
}
// Calcoliamo la percentuale di ridimensionamento in base alle dimensioni finali desederate
$thumb_max_width = 100;
$thumb_max_height = 100;
$percentuale = ($width > $height) ? $thumb_max_width / $width: $thumb_max_height / $height;
$th_width = $width * $percentuale;
$th_height = $height * $percentuale;
$img_new = imagecreatetruecolor($th_width,$th_height);
imagecopyresampled($img_new,$img_in,0,0,0,0,$th_width,$th_height,$width,$height);
if($fileSize > 64000) {
die ("dimensione in KB dell'immagine superiore al consentito.");
}
// prepariamo i dati per l'inserimento in MYSQL
ob_start();
// creiamo il thumbnail in formato in jpeg
imagejpeg($img_new);
$thumbTemp = ob_get_contents();
$thumbnail = addslashes($thumbTemp);
ob_end_clean();
$immagine = addslashes(fread(fopen($tmpName, "r"), $fileSize));
// apriamo la connessione al database
$db_host ="";
$db_user = "";
$db_name = "";
$db_password = "";
$connection = mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server MySQL.\n");
mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
// inseriamo i dati nella tabella
$sql = "INSERT INTO file_upload (bin_data, filename , filesize , filetype, width , height , thumb) VALUES ('$immagine' , '$fileName' , '$fileSize' , '$extension' , $width , $height ,'$thumbnail')";$sql_result = mysql_query($sql,$connection) or die (mysql_error());
$id = mysql_insert_id();
// chiudiamo la commessione
mysql_close($connection);// a seconda del tipo di immagine inviamo al browser l'header corretto
switch($extension) {
case "gif":
header("content-type:image/gif");
imagejpeg($img_new);
exit;
case "jpg":
header("content_type:image/jpeg");
imagejpeg($img_new);
exit;
case "png":
header("content_type:image/png");
imagepng($img_new);
exit;
default:
die ("impossibile visualizzare l'immagine");
}?>
fino a qui tutto bene, i dolori incominciano ora, perchè quando clicco sul file visualizza.php mi compare una tabellina di sfondo grigio chiaro che dovrebbe mostrarmi le immagini in miniatura e una volta cliccato sulle immagini in miniatura dovrebbero apparire le immagini in una finestra di grandezza preimpostate, ma invece mi compare solo la tabellina con al posto delle immagini delle x e quando clicco su di esse si apre una finestra nera di dimensioni preimpostate ma con al posto della immagine grande una x nell'angolo superiore sinistro:
visualizza.php:
<html>
<head>
<title></title>
<script language="JavaScript">
/* funzione javascript per aprire le immagini in una nuova finestra di dimensione prefissata */
function openImg(id,imgW,imgH) {var winWidth = eval(imgW) + 20;
var winHeight = eval(imgH) + 20;
var features = "width=" + winWidth + ",height=" + winHeight+"";
copWindow = window.open("","PHP",features);
copWindow.document.write("<html>\n<head><title>PHP professionale </title></head>\n");
copWindow.document.write("<body bgcolor='#000000'>\n");
copWindow.document.write("<a href='javascript:window.close();'>");
copWindow.document.write("<img src='/immagine.php?id="+id+"'width='"+imgW+"'height='"+imgH+"' border='0' title='clicca per chiudere'></a>\n");
copWindow.document.write("</body>\n</html>");
}
</script>
</head>
<body>
<?php
// connessione al database
$db_host = "";
$db_user = "";
$db_password = "";
$db_name = "";
$connection = mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server Mysql.\n");
mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
$sql = "SELECT id,filename,filetype,width,height FROM file_upload ORDER BY id";
$sql_result = mysql_query($sql,$connection) or die (mysql_error());
$tot = mysql_num_rows($sql_result);
print "<p> </p><table border='0' align='center' cellpadding='5' cellspacing='1' bgcolor='#CCCCCC'>\n";
$i=0;
while($ValoriRiga=mysql_fetch_array($sql_result)) {
$id=$ValoriRiga["id"];
$filename=$ValoriRiga["filename"];
$width=$ValoriRiga["width"];
$height=$ValoriRiga["height"];if($i==0 || $i%4 ==0)
{
echo "</tr valign="top">\n";
}print "<td align='center' valign='middle'> <a href="javascript:openImg('$id','$width','$height')"> <img src='thumb.php?id=$id' title='clicca per ingrancire' border='0'> </a></td>\n";
if($i > 0 && $i % 4 == 3){
echo "</tr>\n";
}$i++;
}
for($j=0 ; $j < $tot % 4; $j++){
echo " <td> </td>\n";
}if($tot-4 >0 ){
echo "</tr>\n";
}print "</table>";
mysql_free_result($sql_result);
mysql_close($connection);
?>i seguenti file thumb.php e immagine.php servono a visualizza per visualizzare prima le anteprime nella tabella (thumb.php) e poi l'immagine nella finestra di dimensioni preimpostate (immagine.php)
thumb.php:
<?php
$db_host ="";
$db_user ="";
$db_password ="";
$db_name ="";
$connection = mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server Mysql.\n");
mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
// dopo essersi connessi al database, recupera i dati del thumbnail dell'immagine identificata dall'id passato come parametro nell'URL
$sql="SELECT thumb FROM file_upload WHERE id=".$_GET['id']."";
$result=mysql_query($sql) or die ("Error " . mysql_errno() . " : " . mysql_error());
mysql_close($connection);
$riga=mysql_fetch_row($result);
// il thumbnail è salvato in formato JPEG , quindi impostiamo il content/type appropriato nell'header della risposta HTTP
header("Content-type:image/jpeg");
print $riga[0];
exit;
?>immagine.php:
<?php
$db_host = "";
$db_user = "";
$db_password = "";
$db_name = "";
$connection=mysql_connect($db_host,$db_user,$db_password) or die ("Impossibile connettersi al server Mysql.\n");
mysql_select_db($db_name,$connection) or die ("Impossibile aprire il database.\n");
// dopo essersi connessi al database, recupera i dati del thumbnail dell'immagine identificata dall'id passato come parametro nell'URL
$sql="SELECT bin_data , filename, filetype FROM file_upload WHERE id=". $_GET['id'] . "";
$result=mysql_query($sql) or die ("Error " . mysql_errno() . " : " . mysql_error());
mysql_close($connection);
$riga=mysql_fetch_row($result);
// a seconda del tipo di immagine impostiamo il content typeswitch ($riga[2]) {
case "gif":
header("Content-type:image/gif");
// con questa istruzione impostiamo il nome del file
header("Content-Disposition: inline; filename=$riga[1];");
print $riga[0];
exit;
case "jpg":
header("Content-type:image/jpeg");
header("Content-Disposition: inline; filename=$riga[1];");
print $riga[0];
exit;
case "png":
header("Content-type:image/png");
header("Content-Disposition: inline; filename=$riga[1];");
print $riga[0];
exit;
default:
die ("Impossibile visualizzare l'immagine");
}
?>c'e qualcuno che puo aiutarmi a visualizzare queste benedette immagini , sono giorni che cerco una soluzione , credo che l'errore sia in questa riga di codice del file Visualizza.php:
print "<td align='center' valign='middle'> <a href="javascript:openImg('$id','$width','$height')"> <img src='thumb.php?id=$id' title='clicca per ingrancire' border='0'> </a></td>\n";
grazie in anticipo per qualsiasi suggerimento.
-
Controlla nelle proprietò dell'immagine l'indirizzo url di questa e postalo,indicando l'indirizzo come dovrebbe essere se corretto.