2011-09-21 14 views
15

Me aparece el error: el tipo de archivo que está intentando cargar no está permitido cuando intento subir un archivo.Carga en Codeigniter: el tipo de archivo que está intentando cargar no está permitido

if(!empty($_FILES['proof_of_purchase']['name'])) { 
    $config['upload_path'] = './uploads/invoices/'; 
    $config['allowed_types'] = 'gif|jpg|jpeg|png|pdf|bmp'; 
    $config['max_size'] = '3000'; 
    $this->load->library('upload', $config); 

     // if there was an error, return and display it 
    if (!$this->upload->do_upload('proof_of_purchase')) 
    { 
     $data['error'] = $this->upload->display_errors(); 
     $data['include'] = 'pages/classic-register'; 
    } else { 
     $data['upload_data'] = $this->upload->data(); 
     $filename = $data['upload_data']['file_name']; 
    } 
} 

He intentado muchas Files- diferente sobre todo gif & jpeg y obtener el mismo error cada vez.

var_dump ($ _ ARCHIVOS); me da:

array(1) { ["proof_of_purchase"]=> array(5) { ["name"]=> string(28) "2010-12-04_00019.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(19) "D:\temp\php2BAE.tmp" ["error"]=> int(0) ["size"]=> int(58054) } } 

He comprobado el mime config y contiene las cosas correctas. Ejemplo:

'jpeg' => array('image/jpeg', 'image/pjpeg'), 
'jpg' => array('image/jpeg', 'image/pjpeg'), 
'jpe' => array('image/jpeg', 'image/pjpeg'), 

¡He pasado demasiado tiempo en esto y me está volviendo loco! Cualquier idea sería extremadamente útil.

+2

tratar de usar '$ this->> upload- de datos()' para verificar información dile leído por CodeIgniter, es probable que encontrar alguna pista allí. –

+0

me parece bien? - 'array (14) {[" file_name "] => string (15)" minifur-hs1.jpg "[" file_type "] => cadena (10)" image/jpeg "[" file_path "] => string (32) "D:/www/web/uploads/facturas /" ["ruta_acceso_pleno"] => cadena (47) "D: /www/website/uploads/invoices/minifur-hs1.jpg" ["raw_name"] = > cadena (11) "minifur-hs1" ["orig_name"] => cadena (0) "" ["client_name"] => cadena (15) "minifur-hs1.jpg" ["file_ext"] => cadena (4) ".jpg" ["file_size"] => int (18168) ["is_image"] => bool (true) ["image_width"] => cadena (0) "" ["image_height"] => string (0) "" ["image_type"] => string (0) "" ["image_size_str"] => string (0) ""} ' – dangermark

+0

También estoy recibiendo este problema. Me sale el error cuando uso '.' en otro campo de la forma, pero parece funcionar bien cada vez que no uso el '.' Extraño. –

Respuesta

25

Si está utilizando la versión 2.1 CodeIgniter. 0 hay un error en la biblioteca de carga. Ver http://codeigniter.com/forums/viewthread/204725/ para más detalles.

Básicamente lo que hice fue modificar unas pocas líneas de código en la carga de archivos de clase (Lugar: ./system/libraries/Upload.php)

1) modificar Número de línea 1044

de:

$this->file_type = @mime_content_type($file['tmp_name']); 
return; 

a esto:

$this->file_type = @mime_content_type($file['tmp_name']); 
if (strlen($this->file_type) > 0) return; 

2) modificar el número de línea 1058

de:

@exec('file --brief --mime-type ' . escapeshellarg($file['tmp_path']), $output, $return_code); 

a esto:

@exec('file --brief --mime-type ' . escapeshellarg($file['tmp_name']), $output, $return_code); 

Como podrán ver, la línea 1058 intenta utilizar un valor de matriz que no existe.

+0

ayudó mucho ... :) – JayKandari

4

He tenido estos mismos problemas con CI y no he podido encontrar una solución en los foros ni a través de google. Lo que he hecho es permitir todos los tipos de archivos, para que el archivo se cargue. Luego, manejo la lógica manualmente para determinar si permitir/mantener el archivo, o eliminarlo y decirle al usuario que el tipo de archivo no está permitido.

$config['upload_path'] = './uploads/invoices/'; 
$config['allowed_types'] = '*'; // add the asterisk instead of extensions 
$config['max_size'] = '3000'; 
$this->load->library('upload', $config); 

if (!$this->upload->do_upload('proof_of_purchase')) 
{ 
    $data['error'] = $this->upload->display_errors(); 
    $data['include'] = 'pages/classic-register'; 
} else { 
    $data['upload_data'] = $this->upload->data(); 
    // use custom function to determine if filetype is allowed 
    if (allow_file_type($data['upload_data']['file_ext'])) 
    { 
     $filename = $data['upload_data']['file_name']; 
    } 
    else 
    { 
     show_error('File type is not allowed!'); 
    } 
} 

EDITAR - Esto es suponiendo que está utilizando CI 2 (1 en CI se puede seguir el tutorial aquí para permitir que todos los tipos de archivos: http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/)

+0

Hasta que encuentre algo que funciona, esta es la única solución que funciona para mí en este momento. Intentó modificar config/mimes.php y system/libraries/Upload.php, pero no sirvió para nada. Supongo que puedo post-procesar tipos de archivos para asegurarme de que sean tipos legítimos. – TARKUS

1

Tuve el mismo problema. Es posible que deba verificar si la aplicación reconoce el tipo mimet del archivo que se está cargando. Agregar un nuevo tipo de mimet a config/mimes.php solucionó el problema. :-)

0

La solución es reemplazar el upload.php en el sistema de bibliotecas// por upload.php de CodeIgniter v2.0.3

3

lo que hice fue crear mi propio "MY_Upload" Biblioteca de extender la clase CI_Upload , luego copié la clase CI_Upload y apliqué los cambios descritos por Adam (muchas gracias por la solución) en mi biblioteca personalizada.

Esto me permite usar la sintaxis CI estándar y evitar el pirateo de los archivos originales. Mi biblioteca se usa automáticamente porque simplemente "amplía" el original, es una solución completamente sencilla y no se romperá si por alguna razón tiene que reemplazar los archivos originales.

PD: Hago esto con la clase de registro también para cuando quiero generar registros personalizados.

0

Este problema se debe a que no tiene la extensión PHP FileInfo. La función que usa la clase de carga es parte de esa extensión.

http://www.php.net/manual/en/ref.fileinfo.php

+0

Acabo de encontrar esa extensión en mi CPanel, y lo habilité. Aún así, aparece el problema de "el tipo de archivo que intentas subir no está permitido" cuando intentas subir un archivo .png. – TARKUS

0

Si no desea cambiar los archivos del sistema. Intenta esto:

  1. abierto system/libraries/Upload.php (método do_upload() línea 205) y hacer esto Try

    var_dump($this->file_type); 
    exit(); 
    
  2. subir algún archivo.

  3. Agregue el tipo de archivo, que se ve en var_dump() a application/config/mimes.php.

Pequeño ejemplo: tiene problema con .docx. Trate de añadir:

'docx' => array('application/zip', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') 

Para application/config/mimes.php.

1

Esto es para Codeigniter versión 2.2. Si esta pregunta aún es relevante Rastreé la falla en file system/libraries/upload.php file para funcionar: protected function _file_mime_type($file) en línea 1032 y línea 1046: $this->file_type = $matches[1]; Cuando estaba cargando un archivo con la extensión .txt, la instrucción en la línea 1046 parece asignar un valor incorrecto de 'text/x-asm' a $this->file_type que más tarde se compara con 'text/plain' y desde tipos MIME no coinciden con la prueba falla e indica un tipo de archivo y el mensaje de error apropiado:

'The filetype you are attempting to upload is not allowed'

solución, no estoy seguro, pero solución rápida que parece funcionar, condición de cambio de la línea 1032 a NOT para que diga: if (!function_exists('finfo_file')) en lugar de: if (function_exists('finfo_file')). Espero que esto pueda ayudar a alguién.

0

El mismo problema que tuve cuando traté de cargar un archivo para cargar, archivos ".xlsx", que en el archivo mimes.php de CodeIgniter tiene una entrada en su matriz, para representar el archivo "xlsx" extensiones

Así que aquí en el siguiente link, he descrito lo que realmente se necesita para superar este problema y encontrar la solución.

Best Regards,

Randika

0

probablemente vale la pena comprobar que dispone de la última versión de la aplicación/config/mimes.php como lugar de establecer una variable $ mimos ahora simplemente devuelve una matriz.

nueva mimes.php

return array

edad mimes.php

$ mimos = array

Si todavía tiene la versión antigua de la mimes.php La función Common.php & get_mimes() devuelve una matriz vacía. Esto tiene el efecto de romper knockon upload.php

Una vez he seguido esto, todo estaba funcionando bien :)

0

1) Permitir todos los tipos de archivos. 2) Establezca manualmente la regla de validación con php tradicional para aceptar o rechazar tipos de archivos. 3) si se obedecen las reglas de validación, luego cargue usando el asistente de carga de CI.

if (isset($_FILES['upload_file']) && !empty($_FILES['upload_file'] ['name'])) { 
     $file_name=$_FILES['upload_file'] ['name']; 
     $acceptedext=array("zip","pdf","png","jpg","jpeg"); 
     $a=(explode('.', $file_name)); 
     $b=end($a); 
     $file_ext=strtolower($b); 

     if (!in_array($file_ext, $acceptedext)) { 
      $this->session->set_flashdata('flash_message_error', "file format not accepted!"); 
      redirect(base_url('page')); 
     } 
     else{ 
      $config['upload_path'] = './uploads/'; 
      $config['allowed_types'] = '*'; 


      $this->load->library('upload'); 
      $this->upload->initialize($config); 

      if (!$this->upload->do_upload('upload_file')) { 

       $error = $this->upload->display_errors('', ' '); 
       $this->session->set_flashdata('flash_message_error', $error); 
       redirect(base_url('page')); 
      } } } 
Cuestiones relacionadas