PHP GD ولدت صورة لا يمكن عرض الصورة لأنها تحتوي على أخطاء في Firefox

PHP GD ولدت صورة لا يمكن عرض الصورة لأنها تحتوي على أخطاء في Firefox

عند إنشاء صورة باستخدام PHP ، على سبيل المثال إضافة علامة مائية إلى صورة مخزنة للخادم ، باستخدام شفرة أدناه ، أو رمز مشابه باستخدام JPEG بدلاً من PNG ، قد لا يتم إنشاء الصورة على الإطلاق وإلقاء خطأ ، مرئيًا مباشرة على Firefox ، ولكن ليس على Chrome.

قد يعمل هذا النوع من التعليمات البرمجية ، على الرغم من العمل على بعض الخوادم ، على بعض الأشياء الأخرى ، أحيانًا لأسباب غامضة. في حالتي ، عملت بشكل جيد تماما محليا ، ولكن تنتج تحت الخطأ على خادم الإنترنت ، لا يمكن عرض الصورة لأنها تحتوي على أخطاء.

يمكن أن تأتي المشكلة من عدة أسباب ، في ما يلي بعض منها:

تم بالفعل تعيين الإخراج مسبقًا.

خطأ حقيقي من توليد الصور.

يتم استخدام نوع الصورة الخطأ.

مكتبة الصور غير مثبتة.

$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');

تم بالفعل تعيين الإخراج مسبقًا

حتى لو لم يكن عن قصد ، قد يكون الأمر على سبيل المثال أن النصوص السابقة الأخرى كانت تحتوي على مسافات في النهاية - لتجنب هذا الخطأ ، تأكد ، كما توصي PHP ، بعدم إغلاق البرامج النصية باستخدام علامة نهاية PHP؟

ثم ، قبل استخدام وظيفة الرأس ، استخدم التعليمة البرمجية التالية للتأكد من تجاهل أي مجموعة تم تعيينها مسبقًا

foreach (getallheaders() as $name => $value) {
header_remove($name);
}

وكذلك هذه الوظيفة للتأكد من عدم إنشاء أي مخرجات قبل الرأس والصورة

ob_end_clean();

هذا حل المشكلة في حالتي ، وتم عرض الصورة بشكل صحيح مرة أخرى.

خطأ حقيقي من توليد الصور

في حالة حدوث خطأ حقيقي أثناء إنشاء الصورة ، تأكد من تعيين PHP لعرض كل أنواع الأخطاء الممكنة ، والتحقق من السجلات المناظرة ، حتى تتمكن من تعقبها وحلها.

سيعمل التعليمة البرمجية التالية على جعل تقارير PHP جميع الأخطاء في السجل:

error_reporting(E_ALL);
ini_set('display_errors', '1');

قد تكتشف بعد ذلك أنه تم الإبلاغ عن بعض الأخطاء ، حتى إذا لم تظهر في مخرجات html ، بسبب تكوين الخادم.

يتم استخدام نوع الصورة الخطأ

تأكد من صحة أنواع الصور التي تستخدمها ، على سبيل المثال باستخدام هذا الرمز للتمييز بين png و jpeg.

تأكد أيضًا من صحة رأس الصفحة وفقًا للإخراج المستخدم ، اعتمادًا على وظيفة إنشاء الصورة المستخدمة

//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');

مكتبة الصور غير مثبتة

للتأكد من تثبيت مكتبات الصور. للقيام بذلك ، قم بتشغيل الدالة phpinfo ()؛ في برنامج نصي ، والتحقق من الإخراج للقيمة التالية المتعلقة بـ PHP GD ، مكتبة الرسومات المستخدمة بواسطة وظائف مثل imagepng ()؛

في حالة فقدان الحزم ، تعتمد طريقة حلها على التكوين المحلي ، إما عن طريق إضافة الحزمة باستخدام أوامر PEAR ، أو باستخدام مضيف الويب المدمج في حل لتثبيت الحزم.

ما يجب القيام به عندما لا يعمل imagejpeg أو imagepng

في NotePad ++ ، افتح ملف PHP الذي يستدعي وظيفة imagepng ، واحفظه بعد الانتقال إلى قائمة التشفير> تحويل إلى UTF-8 بدون BOM.

في DreamWeaver ، انتقل إلى خصائص الصفحة> العنوان / الترميز> قم بإلغاء تحديد تضمين توقيع Unicode (BOM).

عندما لا يعمل PHP imagejpeg أو imagepng ، فمن المحتمل أن يكون ملف PHP قد تم ترميزه باستخدام BOM و Bill Of Material ، وبالتالي يتم إرسال معلومات إضافية مع الصورة قبل بيانات الصورة.

وظائف PHP imagejpeg و PHP imagepng هي وظيفة تستخدم لإرسال رمز صورة مباشرة في استجابة الخادم.

PHP - imagepng لا يعمل بشكل صحيح
PHP - وظيفة imagepng
PHP - وظيفة imagejpeg

قراءة المزيد

مقالات مماثلة

تعليقات (6)

Irvin Vasquez, 2018-08-19
Simple, clear and well explained, many thanks
Joyce Lawrence, 2018-08-19
ありがとう、非常に有益な
Catherine Roberts, 2018-08-19
Dokładnie tego, czego szukałem, idealnie
Headlinext, 2018-08-19
जानकारी का महान टुकड़ा, साझा करने के लिए धन्यवाद
Marshel, 2018-08-19
विश्वास नहीं कर सकता कि मुझे अंत में समाधान मिला, यह लंबे समय तक एक दुःस्वप्न था, अब हल हो गया
porcateraC, 2018-08-19
بالضبط ما كنت أبحث عنه ، مثالي

اترك تعليقا