استكشاف أخطاء PHP في ServBay: الحلول لمشاكل ImageMagick وبطء رفع الملفات الكبيرة
يمنحك ServBay بيئة تطوير ويب محلية سهلة الاستخدام تدعم العديد من إصدارات PHP ووحدات التوسعة الغنية. وعلى الرغم من أن ServBay حريص على توفير خدمات موثوقة ومستقرة، إلا أنه في سياق التطوير قد يواجه المستخدم أحياناً أعطالاً متعلقة بخدمة PHP أو وحدات التوسعة الخاصة به.
تهدف هذه المقالة إلى مساعدتك على تشخيص وحل مشاكل PHP الشائعة في ServBay، وتحديداً مشكلة خطأ امتداد ImageMagick ومشكلة انخفاض سرعة رفع الملفات الكبيرة في PHP، مع توفير خطوات مفصلة للاستكشاف والحلول المقترحة.
أشهر أعطال PHP وحلولها
فيما يلي بعض المشكلات الشائعة التي قد تواجهها مع PHP ووحدات التوسعة وكيفية معالجتها.
خطأ ImageMagick "number of supported formats: 0"
وصف المشكلة:
بعض مستخدمي ServBay قد يواجهون الخطأ التالي أثناء استخدام امتداد ImageMagick مع PHP:
ImageMagick number of supported formats: 0
1
يدل هذا عادة أن مكتبة ImageMagick نفسها لم تتمكن من تحديد صيغ الصور المدعومة أو تحميلها بشكل صحيح.
الحل:
غالبًا تكون المشكلة مرتبطة بالمكتبات الأساسية لحزمة التشغيل (Runtime) الخاصة بـ ServBay. ولحل هذه المشكلة اتبع الخطوات التالية:
- افتح تطبيق ServBay.
- في قائمة التنقل الجانبية، اختر
حزم البرامج
(Packages). - من قائمة الحزم على اليمين، ابحث عن
ServBay Runtime
واختره. - تأكد من أن
ServBay Runtime
مُثبت وأن رقم الإصدار 1.0.20 أو 1.1.20 أو أعلى. إذا كان الإصدار أقل، اضغط زر التحديث لتثبيته بأحدث إصدار. - بعد ترقية
ServBay Runtime
، قم بإعادة تشغيل خدمة PHP التي تستخدمها (مثل PHP 8.1 أو PHP 8.2 وغيرها).
ملاحظة تقنية: تتضمن حزمة ServBay Runtime المكتبات المشتركة الضرورية للمكونات الداخلية وامتدادات PHP. الترقية ستمنحك أحدث إصدار من هذه المكتبات، مما يحل مشاكل تحميل صيغ الصور في ImageMagick.
انخفاض سرعة رفع الملفات الكبيرة في PHP
وصف المشكلة:
قد يلاحظ بعض المستخدمين عند رفع ملفات كبيرة (أكثر من 1 جيجابايت) باستخدام تطبيقات PHP (مثل خدمات Tus-PHP أو NextCloud وغيرها) تباطؤًا واضحًا في سرعة الرفع.
قد يكون سبب المشكلة مرتبط بطريقة معالجة php-fpm وتفاعلها مع تقسيم الملفات (Chunked Transfer Encoding).
الحل:
جرب الحلول التالية لتحسين سرعة رفع الملفات الكبيرة:
زيادة قيمة
pm.max_children
في php-fpmالإعداد الافتراضي في ServBay لعدد عمليات php-fpm هو
pm.max_children = 10
. إذا كان لديك طلبات متزامنة كثيرة أو عمليات رفع تتطلب وقتًا طويلاً لكل عملية، فقد يسبب العدد المنخفض اختناقات.يمكنك زيادة هذه القيمة حسب الحاجة. أيضاً تحقق من طريقة إدارة العمليات (
pm = dynamic
أوpm = ondemand
) وتأثيرها على عبء العمل لديك.خطوات التنفيذ:
- من قائمة التنقل في ServBay اختر إصدار PHP المستخدم (مثل PHP 8.2).
- اضغط زر
Configuration
في الجهة اليمنى. - افتح ملف
php-fpm.conf
. - ابحث عن
pm.max_children
وقم بتعديل القيمة. - احفظ الملف وأعد تشغيل خدمة PHP.
ملاحظة تقنية: زيادة عدد العمليات (child processes) يسمح لـ php-fpm بمعالجة مزيد من الطلبات بالتوازي. في حال رفع ملفات كبيرة تأخذ وقتاً طويلاً، فإن المزيد من العمليات المتاحة يقلل من انتظار الطلبات في الطابور ويزيد من الأداء الكلي.
تعطيل تقسيم الملفات (file chunking) من مستوى التطبيق (غير مستحسن عبر إعدادات ServBay)
هذا الخيار لا يُنصح بتعديله من إعدادات ServBay، لأنه يتطلب تغيير في كود التطبيق وقد يؤثر على بعض الوظائف المعتمدة على نقل الملفات المجزأ. لكن في حالات خاصة، قد يساعد تعطيل أو تعديل طريقة التقسيم من جانب العميل أو الخادم في تجنب تعارضات محتملة مع php-fpm.
تعديل إعداد
fastcgi_request_buffering
في خادم الويب (Nginx/Caddy)إذا كنت تستخدم Nginx أو Caddy وقمت بتمرير الطلبات إلى php-fpm، فإن إعداد
fastcgi_request_buffering
يتحكم في كيفية إرسال جسم الطلب إلى FPM.Nginx: الوضع الافتراضي هو
fastcgi_request_buffering on;
، أي أن Nginx يستقبل الملف كاملاً أولاً ثم يرسله دفعًة واحدة إلى php-fpm. بالنسبة للملفات الكبيرة، يؤدي هذا إلى تأخير واضح قبل معالجة الطلب في FPM. تغييرها إلىfastcgi_request_buffering off;
يسمح بإرسال البيانات تدريجياً إلى php-fpm مما يعزز سرعة رفع الملفات الكبيرة.nginxlocation ~ \.php$ { # ... إعدادات fastcgi الأخرى ... fastcgi_request_buffering off; # أضف أو عدل هذا السطر # ... }
1
2
3
4
5Caddy: أمر
php_fastcgi
في Caddy يتعامل افتراضياً مع الطلبات بنفس طريقةfastcgi_request_buffering off
(نقل البيانات بشكل متدفق). إذا واجهت نفس المشكلة مع إعداد reverse_proxy مخصص، تأكد من عدم وجود آلية تخزين مؤقت إضافية.
خطوات التنفيذ:
- من القائمة الجانبية في ServBay اختر خادم الويب الذي تستخدمه (Nginx أو Caddy).
- اضغط زر
Configuration
. - افتح ملف الإعداد الرئيسي (مثل
nginx.conf
أوCaddyfile
). - في كتلة location لمعالجة طلبات PHP (Nginx) أو كتلة
php_fastcgi
(Caddy)، أضف أو عدل السطر المتعلق بـfastcgi_request_buffering off;
. - احفظ الملف وأعد تشغيل خدمة خادم الويب.
فحوصات إضافية مرتبطة:
- تحقق من إعدادات PHP (
php.ini
): تأكد أن الإعدادات مثلupload_max_filesize
، وpost_max_size
، وmemory_limit
لديها قيم كافية تناسب أحجام الملفات المطلوب رفعها. ضعف هذه الإعدادات يؤدي لفشل الرفع وليس البطء، لكنها من أسباب فشل عمليات الرفع الهامة. - مراجعة ملفات السجلات (Logs): راجع سجلات الأخطاء والوصول الخاصة بخادم الويب (Nginx/Caddy)، وسجلات PHP-FPM. غالبًا ما توفر هذه السجلات معلومات تفصيلية أو استثناءات تساعد في تحديد المشكلة. مسار سجل أخطاء PHP عادة يُحدد عبر توجيه
error_log
فيphp.ini
.
نصائح عامة لاستكشاف مشاكل PHP في ServBay
عند مواجهة مشكلة في PHP ضمن ServBay، اتبع هذه الخطوات العامة للاستكشاف:
- التحقق من إصدار PHP ووحدات التوسعة: تأكد من توافق إصدار PHP مع تطبيقك وأن جميع وحدات التوسعة المطلوبة (مثل ImageMagick، GD، MySQLi وغيرها) منصبة ومفعلة في ServBay. يمكنك كشف كافة المعلومات عبر إنشاء ملف PHP يحتوي على دالة
phpinfo()
وفتحه عبر المتصفح. - فحص حالة خدمات ServBay: تأكد من أن جميع الخدمات المستخدمة (PHP 8.2، Nginx أو Caddy، قواعد البيانات مثل MySQL أو PostgreSQL) تعمل بشكل سليم في ServBay.
- مراجعة سجلات الأخطاء: هذه أهم خطوة في التشخيص.
- سجل أخطاء PHP: انظر إلى الملف المحدد عبر توجيه
error_log
فيphp.ini
. اجعلdisplay_errors
مفعلاً (On
) أثناء التطوير (وOff
في الإنتاج)، وتأكد أنlog_errors
أيضاً علىOn
. - سجلات خادم الويب: راجع ملفات الأخطاء لـ Nginx أو Caddy، التي غالباً توجد ضمن مجلد
logs
في مسار تثبيت ServBay أو حسب ما تم تحديده في ملفات الإعداد. - سجلات تطبيق ServBay: التطبيق نفسه قد يسجل أحداثاً مهمة أو مشاكل بدء التشغيل.
- سجل أخطاء PHP: انظر إلى الملف المحدد عبر توجيه
- تبسيط بيئة الاختبار: بقدر الإمكان حاول إعادة إنتاج المشكلة ضمن بيئة أبسط (مثل ملف PHP بسيط) لتقليل تداخل العناصر وتسهيل التشخيص.
- مراجعة الوثائق والمجتمع الخاص بـ ServBay: راجع الوثائق الرسمية ومجتمع المستخدمين، فهي مصادر ممتازة للمساعدة والحلول للمشاكل الشائعة.
خلاصة
تناولت هذه المقالة حلولاً لمشكلة خطأ ImageMagick وانخفاض سرعة رفع الملفات الكبيرة في ServBay، بالإضافة إلى نصائح عامة لاستكشاف مشاكل PHP. من خلال التأكد من إصدار حزمة التشغيل (Runtime)، وضبط إعدادات php-fpm، وتعديل خيارات تخزين الطلبات المؤقتة في خادم الويب، مع مراجعة السجلات بعناية — يمكن حل معظم مشاكل PHP في بيئة ServBay المحلية. إذا بقيت المشكلة قائمة، لا تتردد في الاستعانة بالسجلات للتشخيص الدقيق وطلب الدعم من مجتمع المستخدمين.