type - upload files php codeigniter
CodeIgniter: "El tipo de archivo que está intentando cargar no está permitido". (10)
- Suba su archivo .wmv al servidor utilizando FTP / SFTP / scp / etc donde ejecuta la aplicación CodeIgniter
En el servidor donde ha cargado el archivo .wmv, ejecute el siguiente código PHP
<?php $file_path = ''CHANGE_THIS_TO_ABSOLUTE_FILE_PATH_THAT_YOU_HAVE_UPLOADED.wmv''; $finfo = finfo_open(FILEINFO_MIME); $mime = finfo_file($finfo, $file_path); var_dump($mime); ?>
Guarde el código como mime.php
- Ejecutar en la terminal - $ php mime.php
- Si vuelca cualquier otro valor que ya tenga para wmv, añada ese valor en los tipos mime wmv.
También verifique PHP_VERSION en otras máquinas de desarrollo. finfo_open se introduce en PHP 5.3. La máquina de desarrollo en la que se está cargando puede tener una versión anterior de PHP o puede tener el tipo de mime correcto para wmv.
Estoy experimentando un problema de carga muy extraño. Aquí está el archivo de vista relevante:
<form action="http://localhost/index.php/temp/upload/" method="post" enctype="multipart/form-data">
<fieldset>
<input type="file" name="userfile"/>
<input type="submit" value="Upload"/>
</fieldset>
</form>
Y aquí está el método upload()
de mi controlador de temp
:
public function upload()
{
$config[''upload_path''] = FCPATH . ''uploads'' . DIRECTORY_SEPARATOR;
assert(file_exists($config[''upload_path'']) === TRUE);
$config[''allowed_types''] = ''avi|mpg|mpeg|wmv|jpg'';
$config[''max_size''] = ''0'';
$this->load->library(''upload'', $config);
if ($this->upload->do_upload(''userfile'') === FALSE)
{
// Some error occured
var_dump($this->upload->display_errors('''', ''''));
var_dump($_FILES);
}
else
{
// Upload successful
var_dump($this->upload->data());
}
}
Cuando cargo un video AVI, todo funciona bien. Cuando cargo, digamos, un video WMV, obtengo los siguientes volcados de var:
string ''The filetype you are attempting to upload is not allowed.'' (length=57)
array
''userfile'' =>
array
''name'' => string ''wmv.wmv'' (length=7)
''type'' => string ''video/x-ms-wmv'' (length=14)
''tmp_name'' => string ''C:/wamp/tmp/php2333.tmp'' (length=23)
''error'' => int 0
''size'' => int 83914
La extensión "wmv" se interpreta como el tipo MIME: video/x-ms-wmv
. Esto debería estar bien ya que mi config / mimes.php tiene lo siguiente:
''wmv'' => array(''video/x-ms-wmv'', ''audio/x-ms-wmv'')
Es una situación similar cuando intento subir otros archivos. Hasta ahora, el único que parece funcionar es mi prueba de video AVI.
¿Alguna idea de lo que podría estar mal?
ACTUALIZACIÓN 1:
Una mi máquina, solo carga AVI. En la máquina de otro desarrollador, no se cargan archivos. En una máquina de otro desarrollador, todos los archivos compatibles se cargan. ¿Son estos problemas de navegador o servidor?
$ config ["allowed_types"] = "*";
¿Intentó usar tipos mime en lugar de extensiones en $ config [''allowed_types'']?
escríbelo así
$config["allowed_types"] = "video/x-msvideo|image/jpeg|video/mpeg|video/x-ms-wmv";
Cambiar en la aplicación / config / Mimes.php
Estás usando Firefox, ¿verdad?
Puede intentar buscar en system/libraries/Upload.php
línea 199:
$this->_file_mime_type($_FILES[$field]);
Cambia esa línea a:
$this->_file_mime_type($_FILES[$field]); var_dump($this->file_type); die();
Luego, cargue su archivo .wmv
. Mostraría algo así como application/octet-stream
o lo que sea. Añádelo a tus mimes.php
. Espero que esta ayuda =)
Respuesta similar here
Algunos enlaces:
Esto es realmente un error en el núcleo ... Actualicé a la última versión de CI y el error desapareció.
Recientemente tuve algunos problemas muy similares con la clase de carga de Codeigniter.
Los * allowed_types * no parecen estar funcionando. Por ejemplo, quería permitir que se subieran imágenes .PNG, pero no las permitía a través de su filtro. Terminé investigando más. Permití que todos los tipos de archivos se cargaran temporalmente, cargué .PNG y luego volqué los datos de carga ( $ this-> upload-> data ()); ) Por alguna razón, ¡pensó que el tipo MIME era text / plain ! Esto podría estar relacionado con tu problema.
Hay algunas soluciones a esto. Encontré navegando en algunos foros donde puedes modificar / extender la clase o el núcleo, pero no funcionaron para mí, lo siento. Creo que es un error Codeigniter Core (creo que el problema ya se ha abierto con EllisLabs). ¡Terminé por codificar la maldita cosa de todos modos! Bueno, espero que esto les ayude a algunos.
Ejemplo básico / solución alternativa
//replace with your allowed MIME types
if ($_FILES[''name_of_form_upload''][''type''] != ''image/jpeg'' && $_FILES[''name_of_form_upload''][''type''] != ''image/png'' && $_FILES[''name_of_form_upload''][''type''] != ''image/gif'') {
$data[''message''] = ''<div class="message">That file type is not allowed!</div>'';
$this->load->view(''home_view'', $data);
} else {
//run upload code
}
Editar: Formateo / Gramática
Respuesta para cargar el archivo .doc en CodeIgniter
Cambia esto
''doc'' => ''application/msword'',
Con esto en la línea no 95 (archivo application/config/mimes.php
)
''doc'' => array(''application/vnd.ms-word'',''application/msword''),
Verifica tu archivo mimes.php en application / config. Debería devolver una matriz de tipos de mime, por ejemplo, return $mimes;
al final del archivo o return array(.....
en el inicio de la matriz de mimos.
si necesita una forma simple de resolver esto, hay una solución fácil para ello. abra el archivo "system / libraries / Upload.php"
line no 465
you will see
if ( ! $this->is_allowed_filetype())
{
$this->set_error(''upload_invalid_filetype'', ''debug'');
return FALSE;
}
just make it true
if ( ! $this->is_allowed_filetype())
{
$this->set_error(''upload_invalid_filetype'', ''debug'');
return TRUE;
}
note : it will stop your all file type validation.