Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [CI] problema upload - filetype not allowed

    Ciao a tutti, sto realizzando un sistema di upload di file per un sito utilizzando codeigniter e nell'upload mi da un problema nel filetype.

    Questo è il codice del controller
    Codice PHP:
    public function upload_pic(){
            
    $error "";
                    
            
    $band_id $this->input->post("band_id");
            
            
    $config["upload_path"] = "./media/img/band/";
                    
                    
    // quando faccio il submit del form mi da un errore filetype not allowed....ma io sto caricando un file .jpg
            
    $config["allowed_types"] = "gif|jpg|png";      
            
    $config["overwrite"] = TRUE;
            
    $config["max_size"] = 0;
            
    $config["max_width"] = 0;
            
    $config["max_height"] = 0;
            
            
    $this->load->library("upload"$config);
            
            if(!
    $this->upload->do_upload("upload_field")){
                
    $error $this->upload->display_errors();
            }
            else{
                
    $data $this->upload->data();
                
                if(
    $this->band_model->update($band_id, array("foto_profilo" => $data["file_name"])) === FALSE){
                    
    $error "Attenzione: c'è stato un errore nel salvataggio dei dati";
                }
                else{
                    
    $error "Il file ".$data["file_name"]." è stato caricato correttamente";
                }
            }
            
            
    // etc. etc.
        

    Mentre questa è la view
    Codice PHP:
    <h3>Cambia la foto profilo</h3>

    <div class="profile_pic">
        [img]<?php echo base_url('media/img/band/'.$profile_pic); ?>[/img]
    </div>

    <div class="upload">
        <div class="upload_form_div">
            <?php echo form_open_multipart("amministrazione/band/upload_pic"$form_attributes); ?>
                <?php echo form_hidden("band_id"$id); ?>
                
                <div class="form_field">
                    <?php echo form_label("Carica una foto profilo""upload_field"); ?>
                    <div class="error_msg"><span></span></div>
                    <?php echo form_upload($upload_attributes); ?>
                </div>
                
                


                    <?php echo form_button($button_attributes["reset"]); ?>
                    
                    <?php echo form_button($button_attributes["save"]); ?>            
                </p>
            <?php echo form_close(); ?>
        </div>
        
        <div class="upload_recap">
            <?php
                
    if(!empty($error)){
                    echo 
    $error;
                }
            
    ?>
        </div>
    </div>
    Praticamente quando faccio il submit mi da un errore "filetype not allowed" quando sto cercando di caricare un file .jpg (che ho definito come allowed nel controller -> $config["allowed_types"] = "gif|jpg|png"; )

    Qualcuno sa darmi una dritta per capire dove sto sbagliando?

    Ah...dimenticavo....l'esempio è copiato pari pari come struttura dalla user guide di CI

  2. #2
    Aggiornamento rapido.....da errore solo caricando un file jpg....

  3. #3
    Alcuni browser passano per i JPG l'estensione JPEG, altri (tipo IE) PJPEG, oppure .
    Penso che dovresti provare a vedere la vera estensione del file con uno script di upload creato da te in cui mandi in echo l'estensione/Mime del file caricato.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Scusa questo post-scriptum, ma credo sia doverso aggiungere che non ho controllato il codice, ma tempo fa ho avuto uno stesso problema (ma senza usare code-igniter).
    Prima cerca di capire se l'errore con i JPG sia dovuto a questo.
    Nel caso, andiamo alla ricerca di altri problemi.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    residenza
    http://www.okkioalprezzo.com/it/
    Messaggi
    206
    È solo con una immagine ho con tutte??
    Fai una cosa prova a stampare i dati del file mettento un print_r($_FILES); subito dopp il metodo upload_pic() e posta la risposta dell'output..




    in questo modo:

    Codice PHP:
    public function upload_pic(){ 
            
    $error ""

            
    // Stampa le info del file:
              
    echo "<pre>";
              
    print_r($_FILES):
            
    // Fine stampa le info del file:



            
    $band_id $this->input->post("band_id"); 
             
            
    $config["upload_path"] = "./media/img/band/"
                     
                    
    // quando faccio il submit del form mi da un errore filetype not allowed....ma io sto caricando un file .jpg 
            
    $config["allowed_types"] = "gif|jpg|png";       
            
    $config["overwrite"] = TRUE
            
    $config["max_size"] = 0
            
    $config["max_width"] = 0
            
    $config["max_height"] = 0
             
            
    $this->load->library("upload"$config); 
             
            if(!
    $this->upload->do_upload("upload_field")){ 
                
    $error $this->upload->display_errors(); 
            } 
            else{ 
                
    $data $this->upload->data(); 
                 
                if(
    $this->band_model->update($band_id, array("foto_profilo" => $data["file_name"])) === FALSE){ 
                    
    $error "Attenzione: c'&egrave; stato un errore nel salvataggio dei dati"
                } 
                else{ 
                    
    $error "Il file ".$data["file_name"]." &egrave; stato caricato correttamente"
                } 
            } 
             
            
    // etc. etc. 
        

    se è solo con una sola immagine devi aggiornare l'array dei file permessi nel mimes.

    prova a fare in questo modo: nel framework spostati sulla directory application/config/mimes.php, e sostituisci le seguenti righe di codice:
    Codice PHP:
    //aggiungi  ai quattro formati di immagine l'estensione: application/octet-stream
    'gif'   =>     array('image/gif',  'application/octet-stream'),
    'jpeg'  =>      array('image/jpeg''image/pjpeg''application/octet-stream'),
    'jpg'   =>      array('image/jpeg''image/pjpeg''application/octet-stream'),
    'jpe'   =>      array('image/jpeg''image/pjpeg''application/octet-stream'),
     
    'png'   =>      array('image/png',  'image/x-png''application/octet-stream'), 

  6. #6
    Oltre a quanto già ti è stato detto...
    Codice PHP:
    $config["allowed_types"] = "gif|jpg|jpeg|png";  // aggiungi jpeg 
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  7. #7
    Ciao a tutti e grazie delle risposte.
    Ho notato che l'errore me lo da con una sola immagine....ho provato a caricare un altro file .jpg e funziona correttamente dopo aver fatto la modifiche che mi avete detto:

    1) aggiunto jpeg agli allowed types
    Codice PHP:
    $config["allowed_types"] = "gif|jpg|jpeg|png"
    2) aggiunto application/octet-stream in mimes.php
    Codice PHP:
    'gif'    =>    array('image/gif''application/octet-stream'),
                    
    'jpeg'    =>    array('image/jpeg''image/pjpeg''application/octet-stream'),
                    
    'jpg'    =>    array('image/jpeg''image/pjpeg''application/octet-stream'),
                    
    'jpe'    =>    array('image/jpeg''image/pjpeg''application/octet-stream'),
                    
    'png'    =>    array('image/png',  'image/x-png''application/octet-stream'), 
    Il problema sta a capire se era quel file a dare noia o meno....ecco l'output del print_r:
    codice:
    Array
    (
        [upload_field] => Array
            (
                [name] => me.jpg
                [type] => image/jpeg
                [tmp_name] => /tmp/phpFQreEe
                [error] => 0
                [size] => 15984
            )
    
    )

  8. #8
    Il mime type passato dai browser può essere falsificato e/o modificato, così come l'intestazione del file può essere mascherata o modificata.
    Anzichè affidarti ai check di CI, che nel 95% dei casi va bene ma ti resta un 5% scoperto, dovresti usare i mime_type "di sistema". Ecco uno snippet di esempio.
    Codice PHP:
        // Apro i mime
        
    $finfo finfo_open(FILEINFO_MIME);
        
    // Un po' di settaggi...
        
    $file_infos->tempFile $_FILES['Filedata']['tmp_name'];
        
    $file_infos->fileTypes = array('jpg','jpeg','gif','png'); // File extensions
        // Variables from file
        
    $file_infos->fileParts pathinfo($_FILES['Filedata']['name']);
        
    $file_infos->fileSize $_FILES['Filedata']['size'];
        
    $file_infos->fileMime finfo_file($finfo$file_infos->tempFile);
        
    // Passo passo controllo la coerenza
        // Mime
        
    if (stripos($file_infos->fileMime"image") === false) {
            
    $this->error_string "{$_FILES['Filedata']['name']} is NOT a valid image type: {$file_infos->fileMime}";
            }
    .... 

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.