Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Upload multiplo con resize e thumbnail.

    Questo codice e’ il frutto delle pillole di marketto e xpilux .
    Le due permettevano uno di fare upload multiplo e l’altro upload singolo piu’ resize delle immagini creando anche le thumb.
    Prima di continuare, si consiglia l’attenta lettura delle suddette pillole.
    Ho preso le due e ho fatto il merge…
    Il codice risultante sara’ il seguente:

    config.php
    Codice PHP:
    <?PHP

    define
    ('TMP_DIR''./tmp');

    define('IMAGE_DIR''./img_big');

    define('THUMB_DIR''./img_small');

    define('IMAGE_QUALITY'80);

    define('THUMB_QUALITY'70);

    define('IMAGE_HEIGHT'400);

    define('THUMB_HEIGHT'75);

    ?>

    index.htm
    Codice PHP:

    <html>
        <
    head>
            <
    script type="text/javascript" src="include/esterno.js"></script>
        </head>
            <body>
                <form action="upload.php" method="POST" name="modulo" enctype="multipart/form-data">
                    <table border="1">
                        <tr>
                            <td>Upload file multipli</td>
                        </tr>
                        <tr>
                            <td>
                                <div id="attachment" style="display:none">
                                <input id="file" name="file" type="file" size="55" />
                                [url="#"] Rimuovi[/url]
                                </div>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <div id="attachments">
                                    <input name="file[]" type="file" size="55" />
                                    <span id="attachmentmarker"></span>
                              </div>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
                                  [url="javascript:addUpload('file')"]Aggiungi file[/url]
                                 <div align="right"><input name="submit_upload" type="submit" value="Invia" /></div>
                          </td>
                        </tr>
                        <tr>
                            <td>
                            </td>
                        </tr>
                    </table>
            </form>
        </body>
    </html> 
    upload.php

    Codice PHP:
    <?PHP

    if(!isset($_POST['submit_upload']))
        
    header("Location: index.php");
    else{
        include_once 
    'config.php';
        
    //faccio l'upload dell'img
        
    include_once './include/upload.class.php';
        if(!isset(
    $_FILES)) $_FILES $HTTP_POST_FILES;
        if(!isset(
    $_SERVER)) $_FILES $HTTP_POST_VARS;
        if (
    count($_FILES) > 0){
                
    $numero_filecount($_FILES['file']['tmp_name']);
                for(
    $i=0;$i<$numero_file;$i++)
                    if(empty(
    $_FILES['file']['size'][$i])){
                            echo 
    "L'UPLOAD DEL FILE [b]{$_FILES['file']['name'][$i]}[/b] NON E' ANDATO A BUON FINE!
    \n"
    ;
                            unset( 
    $_FILES['file']['name'][$i]);
                            unset( 
    $_FILES['file']['type'][$i]);
                            unset( 
    $_FILES['file']['size'][$i]);
                            unset( 
    $_FILES['file']['error'][$i]);
                            unset( 
    $_FILES['file']['tmp_name'][$i]);
                    }
                
    // riconteggio il numero dei file che sto caricando in quanto prima ho eliminato quelli vuoti
                
                
    $numero_file    =    count$_FILES['file']['tmp_name']);
                foreach(
    $_FILES['file']['name'] as $chiave=>$valore){
                    
    $up = new FileUpload(TMP_DIR);
                    
    $up->Upload($_FILES['file']['name'][$chiave],$_FILES['file']['tmp_name'][$chiave]);
                    
    //adesso ridimensiono l'img a 400 x 400
                    
    include_once './include/image.class.php';
                    
    $img = new Image(TMP_DIR '/' $up->filename);
                    
    //creo l'immagine sorgente
                    
    $result $img->CreateSourceImage();
                    
    //se il tipo di immagine è supportato salvo 2 file:
                    //uno con l'img grande e uno con l'img piccola nelle rispettive directory
                    
    if($result){
                        
    //salvo l'immagine con altezza 400 lasciandola proporzionata
                        
    $img->SaveProportionateImage(IMAGE_DIR '/' $up->filenameIMAGE_QUALITYIMAGE_HEIGHT);
                        
    //salvo l'immagine con altezza 75 lasciandola proporzionata
                        
    $img->SaveProportionateImage(THUMB_DIR '/' $up->filenameTHUMB_QUALITYTHUMB_HEIGHT);
                        
    //libero la memoria cancellando l'immagine sorgente
                        
    $img->Free();            
                    }
                    
    //se il tipo di img non è supportata
                    //o se il file uploadato nn è un immagine
                    
    else
                        echo 
    'Immagine non valida
    '
    ;

                    
    //In ogni caso cancello il file uploadato nella cartella ./tmp            
                    
    $up->DeleteFile();
            }
        
        echo 
    '[url="view.php"]Guarde le immagini[/url]';
    }
    }

    ?>
    view.php

    Codice PHP:
    <?
    include'config.php';
    $dir=dir(THUMB_DIR);
    while(
    $img $dir->read())
    if((
    $img != '.') & ($img != '..'))
    echo
    '[url="'.IMAGE_DIR.'/'.$img.'"][img]'.THUMB_DIR.'/'.$img.'[/img][/url]';
    ?>


    include/esterno.js

    codice:
    // JavaScript Document
    var max = 0;				// maximum # of attachments allowed
    var currentUploads = 0;		// current # of attachment sections on the web page
    var nameDesc = '';			// Name property for the Description Input field
    var nameFile = '';			// Name property for the File Input field
    var scrollPosVert = 0;		// stores the current scroll position on the form
    
    // for some reason when a div is taken out, the form
    // will scroll to the top on both Firefox and IE
    
    // SCROLL FUNCTIONS
    function saveScrollPos(offset){
    	scrollPosVert=(document.all)?document.body.scrollTop:window.pageYOffset-offset;
    }
    
    function setScrollPos(){
    	window.scrollTo(0, scrollPosVert);
    	setTimeout('window.scrollTo(0, scrollPosVert)',1);
    }
    
    
    // This function adds a new attachment section to the form
    // It is called when the user clicks the "Attach a file" button...
    // It takes three arguments:
    //      maxUploads			- the maximum number of attachments allowed
    //		descFieldName		- the field name for the Description Input field
    //		fileFieldName		- the field name for the File Input field
    function addUpload(fileFieldName){
    	nameFile=fileFieldName;
    	currentUploads++;
    	if (currentUploads>0)
    		document.getElementById('addupload').childNodes[0].data='Aggiungi file';
    	// First, clone the hidden attachment section
    	var newFields = document.getElementById('attachment').cloneNode(true);
    	newFields.id = '';
    	// Make the new attachments section visible
    	newFields.style.display = 'block'; 
    	// loop through tags in the new Attachment section
    	// and set ID and NAME properties
    	//
    	// NOTE:	the control names for the Description Input
    	//			field and the file input field are created
    	//			by appending the currentUploads variable
    	//			value to the nameFile and nameDesc values
    	//			respectively
    	//
    	//			In terms of Xaraya, this means you'll need to name your
    	//			DD properties will need names like the following:
    	//				"AttachmentDesc1"
    	//				"AttachmentFile1"
    	//				"AttachmentDesc2"
    	//				"AttachmentFile2"
    	//				"AttachmentDesc3"
    	//				"AttachmentFile3"
    	//				et cetera...
    	var newField = newFields.childNodes;
    	for (var i=0;i<newField.length;i++){
    		if (newField[i].name==nameFile){
    			newField[i].id=nameFile+currentUploads;
    			newField[i].name=nameFile+'[]';
    		}
    	}
    	// Insert our new Attachment section into the Attachments Div
    	// on the form...
    	var insertHere = document.getElementById('attachmentmarker');
    	insertHere.parentNode.insertBefore(newFields,insertHere);
    }
    
    
    
    // This function removes an attachment from the form
    // and updates the ID and Name properties of all other
    // Attachment sections 
    function removeFile(container, item){
    	// get the ID number of the upload section to remove
    	var tmp = item.getElementsByTagName('input')[0];
    	var basefieldname = '';
    	basefieldname = nameFile;
    	var iRemove=Number(tmp.id.substring(basefieldname.length, tmp.id.length));
    	// Shift all INPUT field IDs and NAMEs down by one (for fields with a
    	// higher ID than the one being removed)
    	var x = document.getElementById('attachments').getElementsByTagName('input');
    	for (i=0;i<x.length;i++){
    		basefieldname=nameFile;
    		var iEdit = Number(x[i].id.substring(basefieldname.length, x[i].id.length));
    		if (iEdit>iRemove){
    			x[i].id=basefieldname+(iEdit-1);
    			x[i].name=basefieldname+(iEdit-1);
    		}
    	}
    
    	// Run through all the DropCap divs (the number to the right of the attachment
    	// section) and update that number...
    	x=document.getElementById('attachments').getElementsByTagName('div');
    	for (i=0;i<x.length;i++){
    		// Verify this is actually the "dropcap" div
    		if (x[i].id.substring(0, String('dropcap').length)=='dropcap'){
    			ID = Number(x[i].id.substring(String('dropcap').length, x[i].id.length));
    			// check to see if current attachment had a higher ID than the one we're
    			// removing (and thus needs to have its ID dropped)
    			if (ID>iRemove){
    				x[i].id='dropcap'+(ID-1);
    				x[i].childNodes[0].data=(ID-1);
    			}
    		}
    	}
    
    	currentUploads--;
    	saveScrollPos(0);
    	container.removeChild(item);
    	setScrollPos();
    	document.getElementById('addupload').style.visibility='visible';
    	if (currentUploads==0)
    		document.getElementById('addupload').childNodes[0].data='Aggiungi file';
    }
    include/image.class.php

    Codice PHP:
    <?PHP

    class Image{

        var 
    $src_filename;

        var 
    $src_witdh;

        var 
    $src_height;

        var 
    $src_type;

        var 
    $src_attr;

        var 
    $src_image;  



        function 
    Image($filename){

            
    $this->src_filename $filename;

            
    $this->GetImageInfo();

        }



        function 
    GetImageInfo(){

            list(
    $this->src_width,$this->src_height$this->src_type$this->src_attr) = getimagesize($this->src_filename);

        }



        function 
    CreateSourceImage(){

            switch(
    $this->src_type){

                case 
    1:

                    
    $this->src_image =imagecreatefromgif($this->src_filename);

                       break;

                case 
    2:

                    
    $this->src_image =imagecreatefromjpeg($this->src_filename);

                break;

                case 
    3:

                    
    $this->src_image =imagecreatefrompng($this->src_filename);

                break;

                default:    return 
    false;

            }



            return 
    true;

        }



        function 
    SaveProportionateImage($filename$quality$height){

            
    $dest_height $height;

            
    $ratio $this->src_height $dest_height;

            
    $dest_image imagecreatetruecolor$this->src_width $ratio,$dest_height);

            
    imagecopyresampled($dest_image$this->src_image0000,

                
    $this->src_width $ratio,

                
    $this->src_height $ratio,

                
    $this->src_width,

                
    $this->src_height);

            
    imagejpeg($dest_image$filename.'.jpg'$quality);

            
    imagedestroy($dest_image);

        }



        function 
    Free(){

            
    imagedestroy($this->src_image);

        }

    }

    ?>
    include/upload.class.php

    Codice PHP:
    <?

    class FileUpload{

        var 
    $up_dir;        //la directory temporanea in cui verrà uploadata l'img
        
    var $filename;    //il nome del file

        
    function FileUpload($up_dir){
            
    $this->up_dir $up_dir;
        }

        function 
    Upload($files_name,$files_tmp){
            
            if(!
    file_exists($this->up_dir))
                die(
    'La directory non esiste!');
                
            if(
    trim($files_name) == "")
                die(
    "Non hai indicato il file da uploadare!");


            if(
    is_uploaded_file($files_tmp)){
                
    move_uploaded_file($files_tmp,$this->up_dir."/".$this->filename)
                    or die(
    "Impossibile spostare il file;controlla l'esistenza o i permessi della directory!");
            }
            else
                die (
    "Problemi nell'upload del file ".$files_name);
        }

        function 
    DeleteFile(){
            
    unlink($this->up_dir '/' $this->filename);
        }

    }

    ?>
    poi ci sono le directory vuote

    img_big
    img_small



    Il tutto e’ molto molto simile al codice scritto da xPilux.


    Ho riscontrato due problematiche risolvibili tranquillamente dagli esperti di javascript… (io non sono fra questi )

    1) La possibilita’ di non aggiungere file vuoti.
    2) Il controllo di non aggiungere file gia’ aggiunti in precedenza.
    3) Esiste la possibilita' di uploadare in una parte di sito dove non si hanno i permessi di scrittura (cambiando precedentemente i permessi alla directory naturalmente)?
    Ciao
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    ecco una funzioncina che uso di solito per i controlli js:

    codice:
    <script>
    function check_form() {
    var errore="";
    if (document.form[0].nomecampo.value=="") {
      errore=errore+"\nIl campo non puo\' essere vuoto";
    }
    if (document.form[0].campo1.value==document.form[0].campo2.value) {
      errore=errore+"\ncampo1 e campo2 non possono essere uguali";
    }
    if (errore!="") {
      alert("Si sono verificati i seguenti problemi:\n"+errore);
    } else {
      document.form[0].submit();
    }
    }
    </script>
    ho notato che nel codice php il controllo sul campo vuoto c'è già,mi raccomando non affidarti mai ai soli controlli js.

    ciao.

    [edit]
    3. chmod

  3. #3
    premesso che che non esperienza con php ma solo con asp... ho provato ad implementare questa bellissima procedura ma incontro subito un problema che non riesco a risolevere.. eseguendo il primo upload ottengo questo errore :

    Warning: move_uploaded_file(./tmp/): failed to open stream: Permission denied in C:\Inetpub\wwwroot\pics\upload\include\upload.clas s.php on line 22

    Warning: move_uploaded_file(): Unable to move 'C:\WINNT\TEMP\php20.tmp' to './tmp/' in C:\Inetpub\wwwroot\pics\upload\include\upload.clas s.php on line 22
    Impossibile spostare il file;controlla l'esistenza o i permessi della directory!


    immagino che sia un problema di diritti, ma non capisco quale. e poi cosa c'entra la cartella c:\winnt\temp ?
    spero in un aiuto per poter usare questo utilissimo strumento e cmq complimenti per il post !

  4. #4
    Aggiungo qualcosa che sto scoprendo ...
    mi trovo in un server win2000 , sembra che diano fastidio i percorsi segnati con slash "/" invece che "\"
    ma se lo modifico mi da una caterva di altri errori sulla sintassi del codice, lo stesso dreamweaver non riconosce la sintassi (invertendo lo slash tratta tutto il resto cme se fosse una stringa !!!!

    if(is_uploaded_file($files_tmp)){
    move_uploaded_file($files_tmp,$this->up_dir."/" .$this->filename) or die("Impossibile spostare il file;controlla l'esistenza o i permessi della directory!");

    forse mi sono imbarcato in una ginepraio non sapendo nulla di php ?

  5. #5
    apportando le seguenti modifiche alla riga 22 della classe upload.class.php , NON SO PERCHE', ma funziona.. o meglio.. almeno riesco a trasferire il file nella cartella tmp.. ora daà errore sul resize.. a questo punto spero di arrivare in fondo per capire se il codice preso funziona oppure no.
    come era :
    if(is_uploaded_file($files_tmp)){
    move_uploaded_file($files_tmp,$this->up_dir."/".$this->filename) or die("Impossibile spostare il file;controlla l'esistenza o i permessi della directory!");


    come è ora
    if(is_uploaded_file($files_tmp)){
    move_uploaded_file($files_tmp,$this->up_dir."\\".$files_name) or die("Impossibile spostare il file;controlla l'esistenza o i permessi della directory!");

  6. #6
    ok rinuncio. i jscript n on vanno, non va il resize , non va nulla praticamente...
    sembra che non sia compatibile con win2000 credo, pare, si vocifera, l'ha detto emilio fede pure!
    grazie a tutti del prezioso aiuto

  7. #7

    I warning dicono tutto

    I warning errors di PHP spiegano tutto: hai creato la cartella temp?
    PHP ne ha bisogno per caricarci temporaneamente i files prima di spostarli in quella definitiva che tu scegli come destinazione dell'upload.

    Inoltre tale cartella (temp) deve avere determinati permessi di scrittura (credo il 777) da modificare con CHMOD. Win2000 supporta i comandi CHMOD?
    E il tuo hosting lo supporta?
    La maggior parte dei provider abilita l'amministrazione dei permessi CHMOD solo su una cartella, solitamente la "public".
    Gianiaz ha suggerito un link alla documentazione ufficiale di PHP, prova a leggere qualcosa, prima o poi ti serviranno sicuramente.
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  8. #8
    La struttura di cartelle e di permessi è a posto, il file viene uploadato regolarmente e posto nella cartella temp configurata in congi.php.
    Quello che sto rilevando è che gli "/" sembra non vengano supportati mentre sono ben accetti i "\" però scritti come "\\" senno' non vengono interpretati.
    Insomma tutto sembra ruotare intorno a nome di file inesistenti, variabili settate male e javascript non funzionanti. Credo si tratti di errori lievi che chiunque conosca php possa risolvere e che nulla tolgono alla bontà dell'applicazione. ma per chi , come me, non ha dimestichezza con questo linguaggio rappresentano un'ardua prova di pazienza. Il vero problema è che asp non supporta il resize di immagini cacchioooo !

  9. #9
    che fatica su php ! cmq.. sono arrivato qui
    ovvero riesco a trasferire nella cartella tmp il file NON SO PERCHE' STIA FUNZIONANDO ! non ho idea delle modifiche che ho apportato alla classe..
    ora il problema si è spostato sul resze ovviamente .. sempre stessi motivi suppongo. nome del file che non viene passato o simile. infatti come potete vedere getimagesize(.\tmp\) non rileva il nome ma solo il percorso. a questo punto il problema è trovare qualcuno che sappia qualcosa di php (chissà....) e che abbia il buon cuore di correggere le classi...

    Warning: getimagesize(.\tmp\): failed to open stream: Permission denied in C:\Inetpub\wwwroot\shot4fun\upload\include\image.c lass.php on line 31
    Immagine non valida

    Notice: Undefined variable: files_name in C:\Inetpub\wwwroot\shot4fun\upload\include\upload. class.php on line 29

    Warning: unlink(.\tmp\): Permission denied in C:\Inetpub\wwwroot\shot4fun\upload\include\upload. class.php on line 29

  10. #10
    Raga, ma è uno sballo questo forum php ! praticamente te la canti e te la soni da solo !!!! altro che quello ASP dove tutti si adoprano per dare una mano... du palle lì !
    Ok continuando a modificare alla ceca il codice sono arrivato un pezzettino + avanti
    inserendo anche un po' di echo di debug ho ottenuto questo risultato che sono sicuro verrà nuovamente ignorato come di consueto (almeno lo spero altrimenti che divertimento c'e' ? )

    chiave=0
    tipo oggetto=Array
    valore =P26-07-06_11.18.jpg
    nome file da trasf =P26-07-06_11.18.jpg
    nome file temp =C:\WINNT\TEMP\phpA4.tmp
    up->filename =

    (
    visto che up->filename non contiene una cippa ho forzato il codice sostituendo a :
    $img = new Image(TMP_DIR . '\\' .up->filename);
    con :
    $img = new Image(TMP_DIR . '\\' .$_FILES['file']['name'][$chiave]);
    )

    ottenendo quindi

    Fatal error: Call to undefined function: imagecreatefromjpeg() in C:\Inetpub\wwwroot\pics\upload\include\image.class .php on line 49

    giuro sulla tomba di topolino che questo non lo comprendo proprio!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.