Come si carica un'immagine in upload?

MarcoGrazia

Utente Attivo
15 Dic 2009
788
16
18
59
Udine
www.stilisticamente.com
Sì d'accordo non è che non so usare move_file_upload, no devo caricare un'immagine in un database dopo averla ridimensionata.
C'è qualche cosa nel codice che ho scritto che mi blocca e non trovo cos'è, ovviamente non ci sono errori logici o di sintassi, quindi il PHP non mi aiuta.
Il semplice form di upload:
HTML:
<form id="form-foto" method="post" action="upload.php" enctype="multipart/form-data">
  <input type="file" class="btn btn-primary" name="uploadfoto" value="">
  <button type="submit" class="btn btn-info" name="upload">CARICA FOTO <span class="glyphicon glyphicon-upload"></span></button>
</form>
Il codice PHP per l'upload
PHP:
//	Carica foto.
	//	echo '<pre>';var_dump( $_POST, $_FILES );echo '</pre>';
if ( filter_has_var( INPUT_POST, 'upload' )) {
	if( isset( $_FILES['uploadfoto'] ) AND $_FILES['uploadfoto']['error'] == UPLOAD_ERR_OK ) {
		$fileImmagine = file_get_contents( $_FILES['uploadfoto']['tmp_name'] );
			var_dump( getimagesizefromstring( $fileOriginale ));
			//	echo '<pre>';var_dump( $fileImmagine );echo '</pre>';
		$tipoImmagine = exif_imagetype( $_FILES['uploadfoto']['tmp_name'] );
		if ( $tipoImmagine > 0 AND $tipoImmagine < 4 ) {
			//$thumbs = thumbs( $fileImmagine, image_type_to_mime_type( $tipoImmagine ));
		} else {
			$errore = 'Immagine non riconosciuta, sicuro che sia un\'immagine valida? ( GIF, JPG/JPEG e PNG )';
		}
	} else {
		$errore = 'Il file che stai tentando di caricare o è corrotto, o è troppo grande o semplicemente non è un\'immagine.';
	}
}
Ci sono un sacco di remarke relativi alle prove che sto conducendo, thumbs() è una funzione che modifica l'immagine ma che qui non viene chiamata ( fino a quando non risolvo il problema ).
In pratica comunque legga il file contenente l'immagine $_FILES['uploadfoto']['tmp_name'] questo mi viene riportato come una stringa di caratteri, in pratica il file immagine, ma non come foto.
Anche usando le GD non viene letto come immagine ma come stringa di caratteri.
Non so come gestirlo, aiuti?
 

marino51

Utente Attivo
28 Feb 2013
2.951
171
63
Lombardia
non so se hai già risolto e non è molto chiaro quale problema affligge il tuo script,
fammi almeno sapere se l'ho indovinato

ma ... perché vuoi immagazzinare le immagini nel database ?
il "file system" non è già un ottimo database ?

ciao
Marino

ps, scusa se l'ho presa un po' alla larga, ma mi piaceva capire e vedere cose nuove
ho mixato un mio script con il tuo ....
PHP:
<?php
if ( empty($_POST) ) 
    { 
?>

<form id="form-foto" method="post" action="UploadPhoto.php" enctype="multipart/form-data">
  <input type="file" class="btn btn-primary" name="uploadfoto" value="">
  <button type="submit" class="btn btn-info" name="upload">CARICA FOTO 
    <span class="glyphicon glyphicon-upload"></span>
  </button>
</form>

<?php
    }
else
    Uploaduploadfoto();

function Uploaduploadfoto()
    {
//  echo '<pre>'; var_dump( $_POST, $_FILES ); echo '</pre>'; 

    $uploadfoto = "";
    if ($_FILES["uploadfoto"]["error"] == 4)
        return true;
    else
        {
        if ($_FILES["uploadfoto"]["error"] > 0)
            {
            print "<font color=red>Upload Return Code: ".$_FILES["uploadfoto"]["error"]."</font><br />";
            return false;
            } 
        }

    if ( filter_has_var( INPUT_POST, 'upload' ))
        { 
        if( !empty( $_FILES['uploadfoto'] ) AND $_FILES['uploadfoto']['error'] == UPLOAD_ERR_OK ) 
            { 
            $uploadfoto_name = $_FILES["uploadfoto"]["name"];
            $uploadfoto_type = $_FILES["uploadfoto"]["type"];
            $uploadfoto_size = $_FILES["uploadfoto"]["size"] / 1024;
            $uploadfoto_temp = $_FILES["uploadfoto"]["tmp_name"];
            $uploadfoto_path = dirname($_FILES["uploadfoto"]["tmp_name"]);
            $uploadfoto      = $uploadfoto_path."/".$uploadfoto_name;


            $image_file = file_get_contents( $_FILES['uploadfoto']['tmp_name'] );
            $image_type = exif_imagetype( $_FILES['uploadfoto']['tmp_name'] );
            $image_size = getimagesizefromstring( $image_file );


            if ( ($uploadfoto_size == 0)			// vale parametro di php.ini 
            || ( ($uploadfoto_type <> "image/gif")
            && ($uploadfoto_type <> "image/jpeg")
            && ($uploadfoto_type <> "image/pjpeg")
            && ($uploadfoto_type <> "application/zip")
            && ($uploadfoto_type <> "application/x-zip-compressed")
            && ($uploadfoto_type <> "application/x-shockwave-flash") ) )
                { 
                print "<font color=red>Dimensione o Tipo di file non valido</font><br />";
//              return false;
                }

            if ( $image_type > 0 AND $image_type < 4 )
                { 
//              $thumbs = thumbs( $image_file, image_type_to_mime_type( $image_type )); 
                }
            else
                { 
                $errore = 'Immagine non riconosciuta, sicuro che sia un\'immagine valida? ( GIF, JPG/JPEG e PNG )'; 
                } 

            print "<table>";
            print "<tr><td>Upload : </td><td>".$uploadfoto_name."</td></tr>";
            print "<tr><td>Type : </td><td>".$uploadfoto_type."</td></tr>";
            print "<tr><td>Size (kB) : </td><td>".$uploadfoto_size."</td></tr>";
            print "<tr><td>Stored in : </td><td>".$uploadfoto_temp."</td></tr>";
            print "<tr><td>folder : </td><td>".$uploadfoto_path."</td></tr>";
            print "<tr><td>new file : </td><td>".$uploadfoto."</td></tr>";
            print "<tr><td> </td><td> </td></tr>";
            print "<tr><td>Type : </td><td>".$image_type."</td></tr>";
            print "<tr><td> </td><td> </td></tr>";
            print "<tr><td>width : </td><td>".$image_size[0]."</td></tr>";
            print "<tr><td>heigh : </td><td>".$image_size[1]."</td></tr>";
            print "<tr><td>type : </td><td>".$image_size[2]."</td></tr>";
            print "<tr><td>dimension : </td><td>".$image_size[3]."</td></tr>";
            print "<tr><td>bits : </td><td>".$image_size['bits']."</td></tr>";
            print "<tr><td>channels : </td><td>".$image_size['channels']."</td></tr>";
            print "<tr><td>mime : </td><td>".$image_size['mime']."</td></tr>";
            print "</table>";

            $image_file = base64_encode( $image_file );
            echo '<pre>'; var_dump( $image_file ); echo '</pre>';

// qui scrivo nel db e poi leggo

            $decoded_file = base64_decode( $image_file );
            @unlink( $uploadfoto_name );
            file_put_contents( $uploadfoto_name, $decoded_file );
            }
        }
    return true;
    } 
?>
 
Ultima modifica: