php e immagini

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'] ['size'] > 0 )

$fileName = $_FILES['fileUP']['name'];

$tmpName = $_FILES['fileUP']['tmp_name'];

$fileSize = $_FILES['fileUP']['size'];

$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&lt</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_wi dth,$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='"+i mgH+"' 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>&nbsp;</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>&nbsp;</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_pa ssword) 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 type

switch ($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.

inviato 9 anni fa
ottone_77
X 0 X

Procedi in questo modo:

1) effettua l'upload di qualche immagine

2) verifica che le immagini siano correttamente inserite nel DB, magari usando phpMyAdmin. Controlla sia l'anteprima che l'originale.

3) verifica che gli script thumb.php e immagine.php funzionano correttamente. Per farlo richiama questi script direttamente dal browser (senza usare visualizza.php). Ad esempio richiama direttamente thumb.php?id=3 oppure visualizza.php?id=4

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

io non ho phpmyadmin uso php5 mysql 5 e apache 2.0. comunque l'upload  carica insieme a  tutti i loro dati comprese immagini che anteprime all'interno della tabella il problema è quando eseguo lo script thumb.php da solo, nel modo in cui dici tu , cioè con  :"thumb.php?id=4" ad esempio perchè cosi non mi visualizza nulla, mentre immagine si.

risposto 9 anni fa
ottone_77
X 0 X

sei sicuro che la thunbnail venga creata e memorizzata nel DB? Puoi verificarlo in qualche modo?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

sono sicuro perchè ho installato anche mysql query browser che mi permette di fare delle query dove è possibile vedere sia l'immagine che la thumbnail.

risposto 9 anni fa
ottone_77
X 0 X

Ho creato i file con il codice che hai riportato e li ho testati uno ad uno. Ovviamente ho creato anche la tabella del DB. A parte qualche piccolo errore (ad esempio nel file immagine.php c'è scritto $db_pa ssword invece di $db_password), posso dire che...

funzionano  :dunno:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

potresti ripostarmi gli errori o magari la tua configuraizione di php? non capisco cosa non funzioni sui miei scripts. 

risposto 9 anni fa
ottone_77
X 0 X

Hai provato ad usare un altro server? A volte è il server che blocca la visualizzazione.

Mi spiego,  una volta anche io sono diventato pazzo perché in locale non riuscivo a vedere le modifiche che facevo al codice, mentre una volta trasferito il tutto sul server remoto funzionava così come l'avevo progettate.

Non so perché mi capitava, so solo che alla fine ho dovuto reinstallare tutto il server locale.

risposto 9 anni fa
Marco Grazia
X 0 X

scusa ma cosa ti funziona ? io ho provato ora con phpmyadmin ma ottengo gli stessi risultati. cioè funziona solo l'upload ma non la visualizzazione con thumb e immagine. potresti dirmi che server utilizzi te e magari se ti do il mio indirizzo di posta elettronica : ottone_tdi@libero.it puoi postarmi il tuo php.ini ?

risposto 9 anni fa
ottone_77
X 0 X

l'ho provato con PHP 5.2 e Apache 2.2

il php.ini è "vaniglia" ovvero è identico al php.ini-dist, ho solo agilitato alcuni moduli (mysql, gd2, ecc.)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

non so che dire , grazie per l'interessamento cercherò in altri modi , ma non riesco a visualizzare queste benedette anteprime con relative immagini.

risposto 9 anni fa
ottone_77
X 0 X

ma ti da qualche errore!? oppure semplicemente nn visualizza l'immagine sostituendola con quella di default con la X rossa in mezzo!?

Perche mi è capitata una cosa analoga una volta e nn capivo il perche' alla fine nn era niente di che praticamente avevo impostato senza volerlo la protezione dalla immagini nel browser..magari nn è il tuo caso ma ricordarlo nn guasta..capita...direi senza dubbio solo a me..

risposto 9 anni fa
mat
mat
1
X 0 X

mi sono dimenticato di dire che il file visualizza.php mi mostra le anteprime ma se clicco no mi apre le immagini originali.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Scrivo anche io qui perchè sto facendo una cosa simile ma  mi viene dato un errore

Warning: imagejpeg() [function.imagejpeg]: SAFE MODE Restriction in effect. The script whose uid/gid is 18332/18332 is not allowed to access /percorso/www/user/jack owned by uid/gid 99/99 in /mounted-storage/home31b/sub002/sc27380-HTJM/www/functions/functions.upload.php on line 243

Warning: imagejpeg() [function.imagejpeg]: Invalid filename in /percorso/www/functions/functions.upload.php on line 243
Errore[1]

per sicurezza ho tolto parte del percorso della directory e ho messo /percorso al suo posto.

Voi sapete spiegarmi perchè non dovrebbe andare?

In locale (win xp) funziona tutto, invece in remoto (linux probabilmente) mi da questo errore.

La cartella jack ha i permessi settati su 777 quindi non dovrebbe avere problemi nello scriverci dentro no?

:cry: aiutatemi! :cry:

risposto 9 anni fa
joule
X 0 X

il SAFE MODE effettua restrizioni più severe rispetto ai normali permessi. Solo il fatto che una cartella abbia un proprietario diverso dall'utente che tenta di accedervi è considerata un'operazione illecita.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda