Este escrito ha sido probado por expertos para garantizar la veracidad de nuestro contenido.
Solución:
Las respuestas de freedompeace, Kiyarash y Sam Vloeberghs:
.rar application/x-rar-compressed, application/octet-stream
.zip application/zip, application/octet-stream, application/x-zip-compressed, multipart/x-zip
También verificaría el nombre del archivo. Así es como puede verificar si el archivo es un archivo RAR o ZIP. Lo probé creando una aplicación de línea de comandos rápida.
Tenga en cuenta que aún 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 que no son RAR como archivos SFX:
$ rar.exe l somefile.srr
SFX Volume somefile.srr
Para cargar:
Se puede encontrar una lista oficial de tipos mime en la Autoridad de Números Asignados de Internet (IANA) . Según su lista Content-Type
encabezado para zip
es application/zip
.
El tipo de medio para rar
los archivos no están registrados oficialmente en IANA, pero el valor de tipo mime no oficial de uso común es application/x-rar-compressed
.
application/octet-stream
significa tanto como: "Le envío un flujo de archivos y no se especifica el contenido de este flujo" (así es true que puede ser un zip
o rar
archivo también). Se supone que el servidor detecta cuál es el contenido real de la transmisión.
Nota: Para cargar, no es seguro confiar en el tipo mime establecido en el Content-Type
encabezamiento. El encabezado se establece en el cliente y se puede establecer en cualquier valor aleatorio. En su lugar, puede usar las funciones de información del archivo php para detectar el tipo de archivo mime en el servidor.
Para descargar:
Si desea descargar un zip
archivo y nada más, solo debe configurar uno solo Accept
valor del encabezado. Cualquier valor adicional establecido se usará como reserva en caso de que el servidor no pueda satisfacer sus necesidades en el Accept
cabecera solicitada tipo mime.
Según las especificaciones de WC3 esto:
application/zip, application/octet-stream
se interpretará como: "Prefiero un application/zip
tipo mime, pero si no puede entregar esto un application/octet-stream
(un flujo de archivos) también está bien".
Así que solo uno:
application/zip
le garantizará un zip
archivo (o un 406 - Not Acceptable
respuesta en caso de que el servidor no pueda satisfacer su solicitud).
no debes confiar $_FILES['upfile']['mime']
, compruebe el tipo MIME usted mismo. Para tal fin, puede utilizar fileinfo
extensión, 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 reinicia tu servidor:
extension=php_fileinfo.dll
Sección de Reseñas y Valoraciones
Recuerda que tienes permiso de valorar este tutorial si diste con la contestación.