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

    getimagesize() [No such file or directory]

    Ciao a tutti, sto diventando matto per aggiungere dei controlli durante l'upload di immagini..
    Sto utilizzando lo script UberUploadCropper preso da:
    http://trentrichardson.com/2011/12/2...crop-no-flash/

    Lo script funziona molto bene,ma purtroppo permette anche il caricamento di shell... vorrei aggiungere quindi il controllo del mime type ma la funzione in oggetto non mi funziona e mi riporta errore:

    codice:
    Warning:  getimagesize(/../../_userAccountFolder/311/fiore.bmp) [function.getimagesize]: failed to open stream: No such file or directory in E:\xampp\htdocs\_mySite\_impostazioni\scripts\fileuploader\fileuploader.php on line 88
    
    {'error':'error in uploading'}
    Vi posto la classe dell'uploader con il relativo controllo da me inserito:
    Codice PHP:
     Handle file uploads via XMLHttpRequest
     
    */
    class 
    qqUploadedFileXhr {
        
    /**
         * Save the file to the specified path
         * @return boolean TRUE on success
         */
        
    function save($path) {    
            
    $input fopen("php://input""r");
            
    $temp tmpfile();
            
    $realSize stream_copy_to_stream($input$temp);
            
    fclose($input);
            
            if (
    $realSize != $this->getSize()){            
                return 
    false;
            }
            
            
    $target fopen($path"w");        
            
    fseek($temp0SEEK_SET);
            
    stream_copy_to_stream($temp$target);
            
    fclose($target);
            
            return 
    true;
        }
        function 
    getName() {
            return 
    $_GET['qqfile'];
        }
        function 
    getSize() {
            if (isset(
    $_SERVER["CONTENT_LENGTH"])){
                return (int)
    $_SERVER["CONTENT_LENGTH"];            
            } else {
                throw new 
    Exception('Getting content length is not supported.');
            }      
        }   
    }

    /**
     * Handle file uploads via regular form post (uses the $_FILES array)
     */
    class qqUploadedFileForm {  
        
    /**
         * Save the file to the specified path
         * @return boolean TRUE on success
         */
        
    function save($path) {
            if(!
    move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
                return 
    false;
            }
            return 
    true;
        }
        function 
    getName() {
            return 
    $_FILES['qqfile']['name'];
        }
        function 
    getSize() {
            return 
    $_FILES['qqfile']['size'];
        }
    }

    class 
    qqFileUploader {
        private 
    $allowedExtensions = array();
        private 
    $sizeLimit 10485760;
        private 
    $file;

        function 
    __construct(array $allowedExtensions = array(), $sizeLimit 10485760){        
            
    $allowedExtensions array_map("strtolower"$allowedExtensions);
                
            
    $this->allowedExtensions $allowedExtensions;        
            
    $this->sizeLimit $sizeLimit;
            
            
    $this->checkServerSettings();    
            
            if (isset(
    $_GET['qqfile'])) {
                
    $this->file = new qqUploadedFileXhr();
            } elseif (isset(
    $_FILES['qqfile'])) {
                
    $this->file = new qqUploadedFileForm();
            } else {
                
    $this->file false
            }
            
    ########## INIZIO CONTROLLO INSERITO DA ME 
            
    $imgN $this->file->getName();
            
    $pathinfo pathinfo($this->file->getName());
            
    $myPath $pathinfo['dirname'];
            
    $theimgPath '/../../_userAccountFolder/311/'.$imgN;
            
    $imageInfo getimagesize("$theimgPath");   
            if(
    $imageInfo['mime'] != 'image/gif' && $imageInfo['mime'] != 'image/jpg' && $imageInfo['mime'] != 'image/bmp'&& $imageInfo['mime'] != 'image/png'){   
                 die(
    "{'error':'error in uploading'}");       
            }        
    ########## FINE CONTROLLO INSERITO DA ME 
        
    }
        
        private function 
    checkServerSettings(){        
            
    $postSize $this->toBytes(ini_get('post_max_size'));
            
    $uploadSize $this->toBytes(ini_get('upload_max_filesize'));        
            
            if (
    $postSize $this->sizeLimit || $uploadSize $this->sizeLimit){
                
    $size max(1$this->sizeLimit 1024 1024) . 'M';             
                die(
    "{'error':'increase post_max_size and upload_max_filesize to $size'}");    
            }        
        }
            
        
        private function 
    toBytes($str){
            
    $val trim($str);
            
    $last strtolower($str[strlen($str)-1]);
            switch(
    $last) {
                case 
    'g'$val *= 1024;
                case 
    'm'$val *= 1024;
                case 
    'k'$val *= 1024;        
            }
            return 
    $val;
        }
        
        
    /**
         * Returns array('success'=>true) or array('error'=>'error message')
         */
        
    function handleUpload($uploadDirectory$replaceOldFile FALSE$filename=''){
            if (!
    is_writable($uploadDirectory)){
                return array(
    'error' => "Server error. Upload directory isn't writable.");
            }
            
            if (!
    $this->file){
                return array(
    'error' => 'No files were uploaded.');
            }
            
            
    $size $this->file->getSize();
            
            if (
    $size == 0) {
                return array(
    'error' => 'File is empty');
            }
            
            if (
    $size $this->sizeLimit) {
                return array(
    'error' => 'File is too large');
            }
            
            
    $pathinfo pathinfo($this->file->getName());
            if(
    $filename == ''// 2011-12-09: Allow passing in a custom file name
                
    $filename $pathinfo['filename'];
            
    //$filename = $pathinfo['filename'];
            //$filename = md5(uniqid());
            
    $ext $pathinfo['extension'];

            if(
    $this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
                
    $these implode(', '$this->allowedExtensions);
                return array(
    'error' => 'File has an invalid extension, it should be one of '$these '.');
            }
                    
            if(!
    $replaceOldFile){
                
    /// don't overwrite previous files that were uploaded
                
    while (file_exists($uploadDirectory $filename '.' $ext)) {
                    
    $filename .= rand(1099);
                }
            }
            
            if (
    $this->file->save($uploadDirectory $filename '.' $ext)){
                return array(
    'success'=>true'filename'=>($filename.'.'.$ext), 'originalFilename'=>($pathinfo['filename'].'.'.$ext)); // 2011-12-09: Pass back the filename
            
    } else {
                return array(
    'error'=> 'Could not save uploaded file.' .
                    
    'The upload was cancelled, or server error encountered');
            }
            
        }    

    Vi ringrazio anticipatamente!

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao webking

    se l'errore si riferisce alle seguenti righe:

    $theimgPath = '/../../_userAccountFolder/311/'.$imgN;
    $imageInfo = getimagesize("$theimgPath");

    senza andare a guardare tutto il codice, da queste due righe mi sembra che tu vada a controllare le dimensioni del file che ancora non esiste, cioè gli passi come parametro il path che sarà la destinazione definitiva del file,
    dovresti passargli il path del file temporaneo, cioè $_FILES['qqfile']['tmp_name']

  3. #3
    Innanzitutto grazie mille per la risposta, si la riga era proprio quella, scusatemi se non l'avevo scritto..

    io ho messo in questo modo:
    Codice PHP:
    $theimgPath $_FILES['qqfile']['tmp_name'].$imgN;
    $imageInfo getimagesize("$theimgPath"); 
    oppure:
    Codice PHP:
    $theP pathinfo($_FILES['qqfile']['tmp_name']);
    $theimgPath $theP.$imgN;
    $imageInfo getimagesize("$theimgPath"); 
    ma ho errore :

    Undefined index: qqfile

    In effetti a quel punto ancora nn è uploadato il file..

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    prova semplicemente
    $imageInfo = getimagesize($_FILES['qqfile']['tmp_name']);
    in quanto $_FILES['qqfile']['tmp_name'] contiene già il path al file temporaneo

  5. #5
    mmm allora ho provato cosi:

    Codice PHP:
    $imageInfo getimagesize($_FILES['qqfile']['tmp_name']); 
    if(
    $imageInfo['mime'] != 'image/gif' && $imageInfo['mime'] != 'image/jpg' && $imageInfo['mime'] != 'image/bmp'&& $imageInfo['mime'] != 'image/png'){   
      die(
    "{'error':'error in uploading'}");       

    ma ho questi due errori :

    Notice: Undefined index: qqfile

    getimagesize() [function.getimagesize]: Filename cannot be empty

    Ma forse ho sbagliato il posizionamento di questo controllo?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    se non è definito di conseguenza non entrerà mai nemmeno in questo if
    elseif (isset($_FILES['qqfile'])) {
    $this->file = new qqUploadedFileForm();
    }

    controlla che nella form dove viene caricato il file l'input tag abbia il name impostato correttamente

    <input type="file" name="qqfile" />

  7. #7
    sembra che lo passi:

    params = params || {};
    params['qqfile'] = name;
    var queryString = qq.obj2url(params, this._options.action);

    xhr.open("POST", queryString, true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
    xhr.setRequestHeader("Content-Type", "application/octet-stream");
    xhr.send(file);

    mmm sto diventando matto mi sa che devo rifarlo da capo prendendo uploadify e jcrop perchè così non ci sto capendo proprio niente... Quella classe non capisco perchè mi da errori..

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    però tu stai facendo un upload sfruttando html5 e javascript, di conseguenza è normale che non sia definita la variabile $_FILES['qqfile']['tmp_name'].
    Il controllo va diversificato in base al tipo di upload eseguito quindi conviene aggiungere un metodo alle due classi qqUploadedFileXhr e qqUploadedFileForm, ad esempio validate(),
    e quando vai a fare lo switch tra il tipo di upload verrà eseguita e poi gestita la validazione corretta.

    Codice PHP:
    if (isset($_GET['qqfile'])) {             
      
    $this->file = new qqUploadedFileXhr();  
      
    $this->file->validate();       
    } elseif (isset(
    $_FILES['qqfile'])) {             
      
    $this->file = new qqUploadedFileForm(); 
      
    $this->file->validate();         
    } else {             
      
    $this->file false;          


    nel caso sia stato eseguito un upload con classica form
    allora la validate() farà il controllo sulla variabile $imageInfo come dicevamo prima

    $imageInfo = getimagesize($_FILES['qqfile']['tmp_name']);

    se invece è stato eseguito un upload con xhr la validate() farà il controllo adeguato

  9. #9
    Grazie mille per l'aiuto!
    allora io ho creato questo all'interno di "qqUploadedFileForm"
    quindi nell'upload semplice
    Codice PHP:
    function validate(){
     
    $imageInfo getimagesize($_FILES['qqfile']['tmp_name']); 
     if(
    $imageInfo['mime'] != 'image/gif' && $imageInfo['mime'] != 'image/jpg' && $imageInfo['mime'] != 'image/bmp'&& $imageInfo['mime'] != 'image/png'){  
     return 
    false;
     }

    Ma nel caso dell'upload xhr il controllo deve avvenire diversamente

    Codice PHP:
    function validate(){
     
    $imageInfo getimagesize($_GET['qqfile']['tmp_name']);    
     if(
    $imageInfo['mime'] != 'image/gif' && $imageInfo['mime'] != 'image/jpg' && $imageInfo['mime'] != 'image/bmp'&& $imageInfo['mime'] != 'image/png'){  
     return 
    false;
     }

    ma così non mi funziona.. devo utilizzare $_SERVER?

  10. #10
    in "qqUploadedFileXhr" ho creato validate() in questo modo:

    Codice PHP:
    function validate(){
     
    $name $this->getName();
     
    $path pathinfo($this->getName());
          
     
    $imageInfo getimagesize($path.'/'.$this); 
     if(
    $imageInfo['mime'] != 'image/gif' && $imageInfo['mime'] != 'image/jpg' && $imageInfo['mime'] != 'image/bmp'&& $imageInfo['mime'] != 'image/png'){  
      return 
    false;
     }

    ma in questo modo ricevo errore :

    Catchable fatal error: Object of class qqUploadedFileXhr could not be converted to string

    sulla riga:
    $imageInfo = getimagesize($path.'/'.$name);

    credo di esserci vicino..

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.