Imagick es una extensión de PHP para crear y modificar imágenes utilizando la biblioteca ImageMagick. También hay una versión de Imagick disponible para HHVM. Aunque las dos extensiones son en su mayoría compatibles en su API, y ambas llaman a la biblioteca ImageMagick, las dos extensiones son bases de código completamente separadas.
Los errores también se pueden informar en https://bugs.php.net, pero pueden tener un tiempo de respuesta más lento.
La mejor manera de instalar Imagick es a través de un Administrador de paquetes, por ejemplo, APT, YUM, Brew, ya que también instalarán ImageMagick para usted.
Si necesita compilar Imagick desde la fuente, primero debe instalar ImageMagick, al menos la versión 6.2.4, pero se recomienda usar una versión más reciente debido a las muchas correcciones de errores.
Una vez que se instale ImageMagick, los siguientes comandos compilarán e instalarán Imagick:
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
También deberá agregar extension=imagick.so a su archivo Php INI para hacer que PHP cargue la extensión.
Para Windows, instale tanto Imagick como la biblioteca de ImageMagick subyacente desde:
Una vez compilado, Imagick debe ejecutarse con la misma versión de ImageMagick contra la que se compiló. Se sabe que ejecutar una versión diferente de ImageMagick causa problemas de estabilidad, por lo que no se recomienda ni admite.
Si usa Imagick en Nixos, probablemente desee definir FontConfig_File para evitar un mensaje de advertencia al cargar fuentes, y Magick_Configure_Path para tener toda la información disponible de Imagick :: GetConfigureOptions ().
Casi todas las funciones en la biblioteca tienen un ejemplo en www.phpimagick.com, donde puede ver el código de ejemplo para llamar a la función, así como la imagen o salida generada.
ImageMagick, la biblioteca que expone la extensión de Imagick a PHP ha tenido muchas correcciones de errores, que han solucionado muchos problemas de corrupción de imágenes. Recomendamos encarecidamente actualizar a la última versión (mayor a 6.9.1 o 7.x) si es posible.
La extensión PHP Imagick funciona llamando a la biblioteca ImageMagick. Aunque los desarrolladores de ImageMagick tienen mucho cuidado al evitar los errores, es inevitable que algunos errores estén presentes en el código. ImageMagick también usa muchas bibliotecas de terceros para abrir, leer y manipular archivos. Los escritores de estas bibliotecas también tienen cuidado al escribir su código. Sin embargo, todos cometen errores e inevitablemente habrá algunos errores presentes.
Debido a que ImageMagick se usa para procesar imágenes, es posible que los piratas informáticos creen imágenes que contienen datos no válidos para intentar explotar estos errores. Debido a esto, recomendamos lo siguiente:
Hacer esto hará que sea más difícil para los piratas informáticos explotar un error, si uno existe en las bibliotecas que ImageMagick está usando.
Ejecutarlo como un proceso muy bajo privilegiado. En la medida de lo posible, los archivos y los recursos del sistema accesibles para el script PHP de los que se llama Imagick debe bloquearse.
Verifique que todos los archivos de imagen comiencen con los "bytes mágicos" esperados correspondientes a los tipos de archivos de imagen que admite antes de enviarlos a ImageMagick para su procesamiento. Esto se debe hacer con finfo_file () - ver a continuación.
Verifique que el resultado del procesamiento de la imagen sea un archivo de imagen válido antes de mostrarlo al usuario. En el caso extremadamente improbable de que un hacker pueda llevar archivos arbitrarios a la salida de Imagick, verificando que es un archivo de imagen y no el código fuente de su aplicación que se está enviando, es una precaución sensata. Esto se puede lograr mediante el siguiente código:
<?php
$ finfo = finfo_open ( FILEINFO_MIME_TYPE );
$ mimeType = finfo_file ( $ finfo , $ filename );
$ allowedMimeTypes = [
' image/gif ' ,
' image/jpeg ' ,
' image/jpg ' ,
' image/png '
];
if ( in_array ( $ mimeType , $ allowedMimeTypes ) == false ) {
throw new SecurityException ( " Was going to send file ' $ filename ' to the user, but it is not an image file. " );
}Estas recomendaciones no garantizan ninguna seguridad, pero deben limitar su exposición a cualquier problema de seguridad relacionado con Imagick/ImageMagick.
ImageMagick tiene la capacidad de usar la API abierta de procesamiento múltiple para poder usar múltiples hilos para procesar una imagen a la vez. Se sabe que algunas implementaciones de OpenMP tienen problemas de estabilidad cuando se utilizan en ciertos entornos.
Recomendamos hacer uno de los siguientes:
Deshabilitar el soporte de OpenMP en ImageMagick compilándolo con la bandera de compilación "-desacable-openmp" conjunto.
Deshabilite el uso de hilos en ImageMagick a través de Imagick llamando: Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1); o Imagick::setResourceLimit(6, 1); Si su versión de Imagick no contiene la constante ResourceType_Thread.
Deshabilite el uso de hilos en ImageMagick estableciendo el límite de recursos de hilo en el archivo Policy.xml de ImageMagick con <policy domain="resource" name="thread" value="1"/> Este archivo está posiblemente ubicado en /etc/imagemagick-6/policy.xml o ubicación similar.
Si desea usar OpenMP en ImageMagick cuando se llama a través de Imagick, debe probar a fondo que se comporte correctamente en su servidor.
La documentación necesita mucho trabajo. Aquí hay un editor en línea: https://edit.php.net/ Las contribuciones son más que bienvenidas.
Consulte http://abi-laboratory.pro/tracker/timeline/imagemagick/ para obtener cambios de versión exactos de la biblioteca de ImageMagick subyacente.