type txt octet content application php zip mime-types rar

php - octet - mime type txt



Archivos.rar,.zip Tipo MIME (4)

Estoy desarrollando un simple script de carga php, y los usuarios solo pueden cargar archivos ZIP y RAR.

¿Qué tipos de MIME debo usar para verificar $_FILES[x][type] ? (una lista completa por favor)

Gracias..


Para cargar:

Se puede encontrar una lista oficial de tipos de mime en la Autoridad de números asignados de Internet (IANA) . Según su lista Content-Type encabezado Content-Type para zip es application/zip .

El tipo de medio para los archivos rar no está registrado oficialmente en IANA, pero el valor no oficial de tipo mime comúnmente utilizado es application/x-rar-compressed .

application/octet-stream significa tanto como: "Le envío una secuencia de archivos y el contenido de esta secuencia no está especificado" (por lo que es cierto que también puede ser un archivo zip o rar ). El servidor debe detectar cuál es el contenido real de la transmisión.

Nota: Para cargar, no es seguro confiar en el tipo de mimo configurado en el encabezado Content-Type . El encabezado se establece en el cliente y se puede establecer en cualquier valor aleatorio. En su lugar, puede utilizar las funciones de información de archivo php para detectar el tipo mime del archivo en el servidor.

Para descargar:

Si desea descargar un archivo zip y nada más, solo debe establecer un único valor de encabezado Accept . Cualquier conjunto de valores adicionales se usará como respaldo en caso de que el servidor no pueda satisfacerlo en el encabezado Accept aceptado tipo mime.

De acuerdo con las especificaciones WC3 esto:

application/zip, application/octet-stream

se interpretará como: "Prefiero una application/zip mime-type, pero si no puede entregar esto una application/octet-stream (una secuencia de archivos) también está bien".

Entonces solo un single:

application/zip

Le garantizará un archivo zip (o una 406 - Not Acceptable Respuesta 406 - Not Acceptable en caso de que el servidor no pueda satisfacer su solicitud).


Como la extensión puede contener más o menos tres caracteres, lo siguiente probará una extensión, independientemente de su longitud.

Prueba esto:

$allowedExtensions = array( ''mkv'', ''mp3'', ''flac'' ); $temp = explode(".", $_FILES[$file]["name"]); $extension = strtolower(end($temp)); if( in_array( $extension, $allowedExtensions ) ) { ///

para verificar todos los caracteres después del último ''''.


La respuesta de freedompeace:

.rar application/x-rar-compressed, application/octet-stream .zip application/zip, application/octet-stream

Yo también verificaría el nombre del archivo. Aquí es cómo puede verificar si el archivo es un archivo RAR o ZIP. Lo probé creando una aplicación de línea de comando rápida.

<?php if (isRarOrZip($argv[1])) { echo ''It is probably a RAR or ZIP file.''; } else { echo ''It is probably not a RAR or ZIP file.''; } function isRarOrZip($file) { // get the first 7 bytes $bytes = file_get_contents($file, FALSE, NULL, 0, 7); $ext = strtolower(substr($file, - 4)); // RAR magic number: Rar!/x1A/x07/x00 // http://en.wikipedia.org/wiki/RAR if ($ext == ''.rar'' and bin2hex($bytes) == ''526172211a0700'') { return TRUE; } // ZIP magic number: none, though PK/003/004, PK/005/006 (empty archive), // or PK/007/008 (spanned archive) are common. // http://en.wikipedia.org/wiki/ZIP_(file_format) if ($ext == ''.zip'' and substr($bytes, 0, 2) == ''PK'') { return TRUE; } return FALSE; }

Tenga en cuenta que todavía no será 100% seguro, pero probablemente sea lo suficientemente bueno.

$ rar.exe l somefile.zip somefile.zip is not RAR archive

Pero incluso WinRAR detecta archivos no RAR como archivos SFX:

$ rar.exe l somefile.srr SFX Volume somefile.srr


No debe confiar $_FILES[''upfile''][''mime''] , verifique el tipo MIME usted mismo. Para tal fin, puede usar la extensión fileinfo , habilitada por defecto a partir de PHP 5.3.0.

$fileInfo = new finfo(FILEINFO_MIME_TYPE); $fileMime = $fileInfo->file($_FILES[''upfile''][''tmp_name'']); $validMimes = array( ''zip'' => ''application/zip'', ''rar'' => ''application/x-rar'', ); $fileExt = array_search($fileMime, $validMimes, true); if($fileExt != ''zip'' && $fileExt != ''rar'') throw new RuntimeException(''Invalid file format.'');

NOTA: no olvide habilitar la extensión en su php.ini y reiniciar su servidor:

extension=php_fileinfo.dll