Imagick هو امتداد PHP لإنشاء وتعديل الصور باستخدام مكتبة ImageMagick. هناك أيضًا إصدار من Imagick متاح لـ HHVM. على الرغم من أن الامتدادات متوافقان في الغالب في API الخاص بهما ، وكلاهما يطلقان على مكتبة ImageMagick ، فإن الامتدادات هما قواعد رمز منفصلة تمامًا.
يمكن أيضًا الإبلاغ عن الأخطاء في https://bugs.php.net ولكن قد يكون لها وقت استجابة أبطأ.
أفضل طريقة لتثبيت Imagick هي من خلال مدير الحزمة على سبيل المثال ، Yum ، Brew ، لأنها ستقوم أيضًا بتثبيت ImageMagick لك.
إذا كنت بحاجة إلى تجميع Imagick من Source ، فيجب عليك أولاً تثبيت ImageMagick ، على الأقل الإصدار 6.2.4 ولكن يوصى بشدة باستخدام إصدار أحدث بسبب العديد من إصلاحات الأخطاء فيه.
بمجرد تثبيت ImageMagick ، سيتم تجميع الأوامر التالية وتثبيت Imagick:
git clone https://github.com/Imagick/imagick
cd imagick
phpize && ./configure
make
make install
ستحتاج أيضًا إلى إضافة extension=imagick.so إلى ملف PHP INI لجعل PHP تحميل الامتداد.
لنظام التشغيل Windows ، يرجى تثبيت كل من Imagick ومكتبة ImageMagick الأساسية من:
بمجرد التجميع ، يجب تشغيل Imagick بنفس الإصدار من ImageMagick الذي تم تجميعه. من المعروف أن تشغيل نسخة مختلفة من ImageMagick تسبب مشكلات في الاستقرار ، وبالتالي لا ينصح بها أو دعمها.
إذا كنت تستخدم Imagick على nixos ، فربما تريد تحديد fontconfig_file لتجنب رسالة تحذير عند تحميل الخطوط ، و magick_configure_path للحصول على جميع المعلومات المتاحة من Imagick :: getConfigureOptions ().
تحتوي جميع الوظائف تقريبًا في المكتبة على مثال على www.phpimagick.com ، حيث يمكنك رؤية رمز المثال لاستدعاء الوظيفة ، وكذلك الصورة أو الإخراج تم إنشاؤها.
كان لدى ImageMagick ، المكتبة التي يعرضها امتداد Imagick إلى PHP العديد من إصلاحات الأخطاء ، والتي حددت العديد من مشكلات فساد الصور. نوصي بشدة بالترقية إلى أحدث إصدار (أكبر من 6.9.1 أو 7.x) إذا كان ذلك ممكنًا.
يعمل Extension Extension PHP عن طريق استدعاء مكتبة ImageMagick. على الرغم من أن مطوري ImageMagick يهتمون جيدًا بتجنب الأخطاء ، إلا أنه من المحتم أن تكون بعض الأخطاء موجودة في الكود. يستخدم ImageMagick أيضًا الكثير من مكتبات الجهات الخارجية لفتح الملفات والقراءة والتلاعب بها. يعني كتاب هذه المكتبات أيضًا عند كتابة رمزهم. ومع ذلك ، يرتكب الجميع أخطاء وسيكون هناك حدود بعض الحشرات.
نظرًا لاستخدام ImageMagick لمعالجة الصور ، من الممكن للمتسللين إنشاء صور تحتوي على بيانات غير صالحة لمحاولة استغلال هذه الأخطاء. لهذا السبب نوصي بما يلي:
إن القيام بذلك سيجعل من الصعب على المتسللين استغلال خطأ ، إذا كان ينبغي أن يكون المرء في المكتبات التي يستخدمها ImageMagick.
قم بتشغيله كعملية متميزة للغاية. قدر الإمكان ، يجب إغلاق الملفات وموارد النظام التي يمكن الوصول إليها إلى برنامج PHP الذي يتم استدعاؤه من Imagick.
تحقق من أن جميع ملفات الصور تبدأ بـ "Bytes Magic Bytes" المتوقعة المقابلة لأنواع ملفات الصور التي تدعمها قبل إرسالها إلى ImageMagick للمعالجة. يتم القيام بذلك مع finfo_file () - انظر أدناه.
تحقق من نتيجة معالجة الصور هي ملف صورة صالح قبل عرضه للمستخدم. في حالة من غير المرجح للغاية أن يتمكن المتسلل من تنشيط الملفات التعسفية إلى إخراج Imagick ، والتحقق من أنه ملف صورة ، وليس الكود المصدري للتطبيق الذي يتم إرساله ، هو احترازي معقول. يمكن تحقيق ذلك من خلال الكود التالي:
<?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. " );
}لا تضمن هذه التوصيات أي أمان ، ولكن يجب أن تحد من تعرضك لأي مشكلة أمان ذات صلة بالتصوير/ImageMagick.
يتمتع ImageMagick بالقدرة على استخدام واجهة برمجة تطبيقات مفتوحة متعددة المعالجة لتكون قادرة على استخدام مؤشرات ترابط متعددة لمعالجة صورة في وقت واحد. من المعروف أن بعض تطبيقات OpenMP لديها مشكلات في الاستقرار عند استخدامها في بيئات معينة.
نوصي بعمل واحد مما يلي:
تعطيل دعم OpenMP في ImageMagick من خلال تجميعه مع علامة الترجم "-DISable-OpenMP".
تعطيل استخدام المواضيع في ImageMagick عبر Imagick عن طريق الاتصال: Imagick::setResourceLimit(Imagick::RESOURCETYPE_THREAD, 1); أو Imagick::setResourceLimit(6, 1); إذا كان إصدار Imagick الخاص بك لا يحتوي على ثابت ResourceType_Thread.
قم بتعطيل استخدام المواضيع في ImageMagick عن طريق تعيين حد مورد مؤشر ترابط في ملف Policy.xml ImageMagick مع <policy domain="resource" name="thread" value="1"/> ربما يقع هذا الملف على /etc/imagemagick-6/policy.xml أو موقع مماثل.
إذا كنت ترغب في استخدام OpenMP في ImageMagick عندما يتم استدعاؤه من خلال Imagick ، فيجب عليك الاختبار تمامًا أنه يتصرف بشكل صحيح على الخادم الخاص بك.
الوثائق تحتاج إلى الكثير من العمل. يوجد محرر عبر الإنترنت هنا: https://edit.php.net/ المساهمات أكثر من موضع ترحيب.
يرجى الرجوع إلى http://abi-laboratory.pro/tracker/timeline/imagemagick/ من أجل تغييرات الإصدار الدقيق لمكتبة ImageMagick الأساسية.