Php get mime type
Este fin de semana estuvo mi sitio web fuera de línea durante 3 horas porque mi proveedor de alojamiento ha detectado un archivo malicioso dentro del directorio de subida que utilizo para algunas demostraciones de subida de PHP en mi sitio web. Esta brecha fue (también) posible porque me olvidé hace varios meses de actualizar un trabajo CRON que borra todos los archivos de subida con frecuencia. El tiempo de inactividad fue de 3 horas porque fue en medio de la noche en la zona horaria donde vivo. Después de eliminar ese archivo malicioso, mi proveedor de alojamiento web Webfaction habilitó mi sitio web en sólo unos minutos.Detección del tipo MIME durante las subidas¿Cómo fue posible que alguien pudiera subir un archivo malicioso? Mi demostración de carga en PHP utiliza la clase de carga en PHP que escribí hace varios años. Esta “vieja” clase PHP es un script que todavía uso para muchos scripts y sitios web personalizados. La detección del tipo MIME estaba disponible para la versión 2.33 que fue lanzada hace más de dos años, pero parece que mi demo no estaba usando esa característica. La validación de la extensión del archivo funcionaba bien y el archivo malicioso era un archivo JPG.La antigua detección del tipo MIME se basaba en la función PHP mime_content_type() que está marcada como depreciada desde hace tiempo. En la última versión de mi script de subida, la función completa de tipo MIME ha sido reescrita y soporta ahora la extensión Fileinfo para PHP 5. El nuevo método de la clase get_mime_type() todavía soporta la antigua función mime_content_type() como una especie de fallback para los scripts más antiguos.function get_mime_type($file) {
Nombre de archivo Php
El código de la función create_taxonomy se basa en la función PHP mime_content_type() para obtener el tipo de contenido del archivo importado. Sin embargo, hay un error conocido en esta función que hace que algunos archivos sean detectados como un archivo de texto/x-fortran (ver https://stackoverflow.com/questions/16190929/detecting-a-mime-type-fails…).
Para reproducirlo, cree un archivo CSV con un valor en la primera columna de una de las filas que empiece por “C ” seguido de algunos caracteres más (el espacio es importante). Al importarlo, el error que se muestra es simplemente “Fallo al abrir el archivo”.
He hecho que la primera columna de una de las filas empiece por “C ” (la C va seguida de un espacio) seguida de unos cuantos caracteres más y el archivo CSV se ha importado y ha funcionado como siempre. No he podido reproducir el problema.
Llamada a la función indefinida mime_content_type()
The mime_content_type() function is an inbuilt function in PHP which is used to get the MIME content-type of a file.Syntax:string mime_content_type( $file )Parameters: This function accepts single parameter $file which specifies the path of the file which MIME details to be find.Return Value: This function returns the MIME content type or False on failure.Below programs illustrate the mime_content_type() function in PHP:Program 1:Original Image:<?php // PHP program to illustrate mime_content_type function echo mime_content_type(‘gfg.png’) . “</br>”;?>Output:
Program 2:Original Image:<?php // PHP program to illustrate // mime_content_type function // Providing and print result of different kind of files echo mime_content_type(‘/home/rajvir/Desktop/gfg.png’) . “</br>”;echo mime_content_type(‘/home/rajvir/Desktop/gfg_Article.html’) . “</br>”;echo mime_content_type(‘/home/rajvir/Downloads/gfg.gif’) . “</br>”;echo mime_content_type(‘/home/rajvir/Desktop/gfg_contribute.txt’) . “</br>”;echo mime_content_type(‘/home/rajvir/Downloads/geeks.ppt’) . “</br>”;echo mime_content_type(‘/home/rajvir/Downloads/geeks.pdf’) . “</br>”; ?>Output:
Php magic mime
Estoy trabajando en un proyecto en el que necesitaba generar un tipo MIME dado un nombre de archivo. No sólo necesitaba crear una solución que funcionara, también necesitaba que la solución fuera compatible con PHP 4/5 y que no requiriera ningún software adicional para ser instalado en el host. Pensé que esto sería una simple cuestión de encontrar una función de PHP que hiciera esto. Desafortunadamente, las cosas no fueron tan simples como esto.
Encontré un post muy útil sobre PHP, Mime Types y Fileinfo en Jelly and Custard. Los “Tipos Mime en PHP 4.x” parecían ser exactamente lo que yo quería. Rápidamente lo probé en mi servidor, y falló instantáneamente con el siguiente error:
Ya que tengo PHP 5.2.6 corriendo en mi servidor de desarrollo, estaba muy confundido ya que el post decía que esta era una solución para “PHP 4.x”. Busqué la documentación de PHP sobre la función finfo_open y me sorprendió mucho ver que la función es una función de PHP 5.3.0+. Afortunadamente, mi versión de PHP era justo anterior a ésta, de modo que pude detectar el error.
Resulta que el post de Jelly and Custard apunta a otro post, Installing PECL Modules, donde se dan instrucciones para instalar el paquete Fileinfo PECL. La instalación de este paquete permite a las versiones anteriores a la 5.3.0 utilizar las funciones finfo_* a través de PECL.