فحص صلاحية الصور ومعالجتها في ووردبريس عند تشخيص HTTP error
تحاول رفع صورة في ووردبريس فتظهر رسالة «HTTP error» بلا شرح واضح؟ قد تكون الصورة أكبر من الحد المسموح، أو يصل الملف ثم يفشل إنشاء أحجامه الصغيرة. سنبدأ بصورة صغيرة ونقارن النتائج، حتى تعرف هل المشكلة في الرفع أم في معالجة الصورة بعد وصولها.
هناك فرق بين حجم الملف، مثل 500 كيلوبايت، وأبعاد الصورة، مثل عرض 6000 بكسل. الصورة المضغوطة قد تكون صغيرة على القرص لكنها تحتاج ذاكرة كبيرة عند فتحها ومعالجتها. لذلك سنراجع الحجم والأبعاد معا، لا امتداد الملف فقط.
أضفنا في 5 سبتمبر 2026 تجربة بملفين جديدين توضح رفض ملف غير صالح ثم نجاح توليد الأحجام لصورة صحيحة. الصورة التاريخية أعلى المقال تخص فحص الوسائط الأقدم.
نطاق الدليل: نقدم خطوات لتشخيص رسالة HTTP error، أما التجربة الموثقة أدناه فتقتصر على التحقق من ملف الصورة ومعالجته داخل ووردبريس. لم نُعد إنتاج فشل الرفع من المتصفح ثم إصلاحه، لذلك لا نقدم نجاح الرفع الداخلي باعتباره حلا مثبتا لهذه الرسالة.
قسم الرحلة إلى مرحلتين
مرحلة النقل: يقارن الخادم حجم الطلب مع upload_max_filesize وpost_max_size وحدود الوكيل. إذا رفض قبل PHP قد لا يظهر شيء في سجل ووردبريس. مرحلة المعالجة: بعد وصول الملف يقرأ ووردبريس الصورة ويولد Thumbnail وأحجاما أخرى عبر GD أو Imagick؛ هنا قد تفشل الذاكرة أو مكتبة الصورة رغم أن الملف أقل من حد الرفع.
اختبار لا يخلط الأسباب
- ارفع JPG صغيرا من كاميرا أو محرر موثوق، باسم لاتيني بسيط.
- إذا نجح، ارفع الصورة التي تفشل بعد تصغير أبعادها مع إبقاء الصيغة.
- قارن الحجم بالحد الظاهر في الوسائط وصحة الموقع.
- افتح أدوات المطور ثم تبويب Network، وأعد محاولة الرفع. ابحث عن طلب الرفع مثل
async-upload.php، وسجل رمز Status ونص الرد إن أمكن. - اطلب سجل أخطاء PHP في وقت المحاولة. عبارة
memory exhaustedتعني نفاد الذاكرة المتاحة للعملية، وقد يظهر بدلها خطأ من أداة معالجة الصور. - عطل تحسين الصور مؤقتا في نسخة اختبار وأعد الملف نفسه.
قراءة الرموز الشائعة
413 يشير غالبا إلى حجم الطلب في الخادم أو الوكيل. 403 قد يعني رفضا من جدار حماية تطبيقات الويب (WAF) أو مشكلة صلاحية. 500 يحتاج سجل PHP. استجابة 200 مع رسالة خطأ داخل البيانات المنظمة (JSON) تعني أن الطلب وصل إلى التطبيق، لكن العملية نفسها لم تنجح. لا تعتمد على النص المختصر في واجهة الوسائط؛ Network والسجل يعطيان طبقة الفشل.
متى نزيد الذاكرة أو الحد؟
نزيد القيمة فقط إذا أثبت القياس أن الملف يتجاوز حدا مناسبا أو أن المعالجة تنفد من الذاكرة. صورة بعرض ضخم قد تحتاج ذاكرة أكبر كثيرا من حجمها المضغوط. الأفضل غالبا تصغير الأبعاد وضغط الملف قبل الرفع. لا تجعل حد الإنتاج 2GB لمجرد أن المختبر يعرضه؛ الاستضافة يجب أن تضبط قيمة متناسبة مع الموقع ومخاطره.
بعد نجاح الرفع تأكد أن القالب يستخدم الأحجام التي أنشأها ووردبريس بدل تحميل الأصل الضخم لكل شاشة. يشرح اختبار الصور المتجاوبة على الهاتف والحاسوب كيف نقرأ currentSrc وsrcset دون خلط مشكلة الرفع بمشكلة الأداء.
تجربة داخلية لفحص صلاحية الصورة وتوليد أحجامها
تاريخ التنفيذ: 5 سبتمبر 2026. مختبر منفصل باستخدام WordPress Playground CLI 3.1.52؛ ووردبريس 7.1؛ PHP 8.3.32؛ قاعدة SQLite. لم تُجر هذه التجربة على استضافة الموقع المنشور.
بدلا من الاكتفاء بقراءة بيانات صورة قديمة، أدخلنا ملفين جديدين إلى مسار الوسائط في ووردبريس بواسطة media_handle_sideload(). الملف الأول نص عادي يحمل اسما ينتهي بـPNG، والثاني صورة PNG حقيقية أنشأتها مكتبة GD بأبعاد 1200×800 بكسل.
| العينة | ما حدث فعليا | ما نستنتجه |
|---|---|---|
| نص عادي بامتداد PNG | رُفض برمز upload_error ورسالة أن نوع الملف غير مسموح |
اسم الملف لا يكفي لإثبات أنه صورة صالحة |
| PNG صحيح، 1200×800، حجمه 5597 بايت | قُبل وأُنشئ مرفق وأربعة أحجام مشتقة | نجح التحقق من الملف وتوليد الأحجام لهذه الصورة |
الأحجام المسجلة للصورة المقبولة: مصغرة 150×150، متوسطة 300×200، متوسطة كبيرة 768×512، وكبيرة 1024×683 بكسل. قُرئت هذه الأرقام من بيانات المرفق الناتج عن الاختبار الجديد.
كيف تستخدم هذه النتيجة عند ظهور HTTP error؟
- افتح الصورة المتعثرة في محرر صور؛ إذا لم يقرأها، فابدأ من الملف المصدر.
- صدّر نسخة جديدة بصيغة JPG أو PNG فعلية. تغيير اللاحقة من
.txtإلى.pngلا يحوّل البيانات إلى صورة. - جرّب النسخة الجديدة بأبعاد معتدلة. إذا نجحت، قارن الرد والسجل بالملف القديم قبل تغيير حدود الذاكرة.
- إذا كان الملف صالحا واستمر الخطأ، تابع فحص حجم الطلب والصلاحيات وGD أو Imagick وسجل PHP؛ نجاح هذه الحالة لا يستبعد تلك الأسباب.
حدود التجربة: استُخدم رفع جانبي داخلي عبر دوال ووردبريس؛ لم نرسل طلب رفع multipart من المتصفح، ولم نختبر نفاد الذاكرة أو تجاوز حد استضافة. الرمز upload_error هنا خطأ من دالة ووردبريس، وليس رمز استجابة HTTP. لا نغيّر حدود رفع الموقع اعتمادا على حجم هذه العينة.
invalid_png_accepted: false
error_code: upload_error
valid_png_accepted: true
valid_png_bytes: 5597
source_dimensions: 1200x800
generated_sizes: 4
مرجع مسار الوسائط المستخدم: media_handle_sideload().
المصادر
- سؤال مجتمعي عن HTTP error بعد تحديث ووردبريس.
- WordPress: حساب أقصى حجم رفع.
- PHP: upload_max_filesize وpost_max_size.