Imagick est une extension PHP pour créer et modifier des images à l'aide de la bibliothèque ImageMagick. Il existe également une version d'Imagrick disponible pour HHVM. Bien que les deux extensions soient principalement compatibles dans leur API et qu'ils appellent tous les deux la bibliothèque ImageMagick, les deux extensions sont des bases de code complètement distinctes.
Les bogues peuvent également être signalés sur https://bugs.php.net mais peuvent avoir un temps de réponse plus lent.
La meilleure façon d'installer Imagrick est via un gestionnaire de packages, par exemple apt, yum, brasse, car ils installeront également ImageMagick pour vous.
Si vous devez compiler Imagrick à partir de Source, vous devez d'abord installer ImageMagick, au moins la version 6.2.4, mais il est fortement recommandé d'utiliser une version plus récente en raison des nombreuses corrections de bogues.
Une fois ImageMagick installé, les commandes suivantes compileront et installeront Imagick:
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
Vous devrez également ajouter extension=imagick.so à votre fichier PHP INI pour faire charger PHP l'extension.
Pour Windows, veuillez installer à la fois Imagick et la bibliothèque ImageMagick sous-jacente de:
Une fois compilé, Imagick devrait être exécuté avec la même version d'ImageMagick contre laquelle il a été compilé. Il est connu sur une version différente d'ImageMagick pour provoquer des problèmes de stabilité, et n'est donc pas recommandé ou pris en charge.
Si vous utilisez Imagrick sur Nixos, vous voulez probablement définir Fontconfig_file pour éviter un message d'avertissement lors du chargement des polices, et magick_configure_path pour avoir toutes les informations disponibles auprès d'Imagick :: getConfigureOptions ().
Presque toutes les fonctions de la bibliothèque ont un exemple sur www.phpimagick.com, où vous pouvez voir l'exemple de code pour appeler la fonction, ainsi que l'image ou la sortie générée.
ImageMagick, la bibliothèque que l'extension Imagick expose à PHP a eu de nombreuses corrections de bogues, qui ont résolu de nombreux problèmes de corruption d'image. Nous recommandons fortement la mise à niveau vers la dernière version (supérieure à 6.9.1 ou 7.x) si possible.
L'Imagick de l'extension PHP fonctionne en appelant la bibliothèque ImageMagick. Bien que les développeurs ImageMagick prennent bien soin d'éviter les bogues, il est inévitable que certains bogues soient présents dans le code. ImageMagick utilise également de nombreuses bibliothèques tierces pour ouvrir, lire et manipuler des fichiers. Les écrivains de ces bibliothèques prennent également soin lors de la rédaction de leur code. Cependant, tout le monde fait des erreurs et il y aura inévitablement certains bugs présents.
Parce que ImageMagick est utilisé pour traiter les images, il est possible pour les pirates de créer des images contenant des données non valides pour tenter d'exploiter ces bogues. Pour cette raison, nous recommandons ce qui suit:
Cela rendra plus difficile pour les pirates d'exploiter un bogue, si l'on devait exister dans les bibliothèques que ImageMagick utilise.
Exécutez-le comme un processus privilégié très bas. Dans la mesure du possible, les fichiers et les ressources système accessibles au script PHP dont Imagick est appelé doivent être verrouillés.
Vérifiez que tous les fichiers d'image commencent par les "octets de magie" attendus correspondant aux types de fichiers d'image que vous prendre en charge avant de les envoyer à ImageMagick pour le traitement. Ceci être fait avec finfo_file () - voir ci-dessous.
Vérifiez que le résultat du traitement d'image est un fichier d'image valide avant de l'afficher à l'utilisateur. Dans le cas extrêmement improbable, un pirate est en mesure de tuer des fichiers arbitraires à la sortie d'Imagrick, vérifiant qu'il s'agit d'un fichier image, et non du code source de votre application envoyée, est une précaution judicieuse. Cela peut être accompli par le code suivant:
<?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. " );
}Ces recommandations ne garantissent aucune sécurité, mais elles devraient limiter votre exposition à tout problème de sécurité lié à Imagick / ImageMagick.
ImageMagick a la possibilité d'utiliser l'API multi-traitement ouverte pour pouvoir utiliser plusieurs threads pour traiter une image à la fois. Certaines implémentations d'OpenMP sont connues pour avoir des problèmes de stabilité lorsqu'ils sont utilisés dans certains environnements.
Nous vous recommandons de faire l'un des éléments suivants:
Désactivation du support OpenMP dans ImageMagick en le compilant avec l'indicateur de compilation "--disable-openmp".
Désactivez l'utilisation de threads dans ImageMagick via Imagick en appelant: Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1); ou Imagick::setResourceLimit(6, 1); Si votre version d'Imagrick ne contient pas la constante ResourceType_thread.
Désactivez l'utilisation de threads dans ImageMagick en définissant la limite de ressources de thread dans le fichier Policy.xml de la ressource ImageMagick avec <policy domain="resource" name="thread" value="1"/> Ce fichier est peut-être situé sur /tc/imagemagick-6/policy.xml ou un emplacement similaire.
Si vous souhaitez utiliser OpenMP dans ImageMagick lorsqu'il est appelé via Imagick, vous devez tester soigneusement qu'il se comporte correctement sur votre serveur.
La documentation nécessite beaucoup de travail. Il y a un éditeur en ligne ici: https://edit.php.net/ Les contributions sont plus que bienvenues.
Veuillez vous référer à http://abi-loboratory.pro/tracker/timeline/imagemagick/ pour les modifications de version exacte de la bibliothèque ImageMagick sous-jacente.