تجاوز الحد الأقصى لوقت التنفيذ
أوقفت PHP برنامج نصي كان يعمل لفترة أطول مما هو مسموح به. الحد قام بعمله ؛ السؤال هو ما إذا كانت الوظيفة تنتمي إلى طلب ويب.
Fatal error: Maximum execution time of 30 seconds exceeded
العمل على ما إذا كان هذا هو طلب ويب أو وظيفة خلفية. الصفحة التي تحتاج إلى أكثر من ثلاثين ثانية لديها مشكلة لإصلاح؛ الاستيراد الذي يحتاج عشر دقائق يحتاج لتشغيل مكان ما لا ينطبق مهلة.
الأسباب الأرجح أولًا.
افحص القائمة بالترتيب. يتيح لك كل فحص تأكيد السبب أو استبعاده قبل تغيير أي شيء، لأن الحلول تختلف والتخمين يكلّف أكثر من تنفيذ أمر للتحقق.
| السبب | كيفية التحقق | الإصلاح |
|---|---|---|
| وظيفة ضخمة تعمل في المتصفح | الفشل يتبع إجراء بدأته في wp-admin ويتوقف في نفس الوقت المنقضي كل محاولة. | قم بتشغيله من WP-CLI ، حيث لا ينطبق الحد الأقصى ، أو في قطع تسجل التقدم وتستأنف. |
| تحديث أو تثبيت على رابط بطيء | يحدث الفشل أثناء التنزيل بدلاً من المعالجة ، وتفشل الحزم الأكبر بينما تنجح الحزم الصغيرة. | رفع الحد الأقصى لسياق المشرف ، أو التثبيت من نظام الملفات بدلاً من HTTP. |
| مكالمة بطيئة صادرة داخل صفحة | يتأثر عنوان URL العادي للواجهة الأمامية ويعتمد الموقع على خدمة طرف ثالث تمر بيوم سيء. | قم بربط الطلب الصادر بمهلة خاصة به وقم بتخزين النتيجة ، بدلاً من رفع حد البرنامج النصي حوله. |
| ينطبق الحد الأقصى حيث لم تتوقع ذلك | تختلف القيمة بين CLI وطلب الويب والكرون - يمكن أن يحمل كل سياق سياقًا مختلفًا. | تغييره حيث تعمل المهمة في الواقع. لا يؤدي الحد الأعلى للويب إلى أي شيء بالنسبة لوظيفة يتم تنفيذها تحت cron. |
| حلقة لانهائية | يتم قضاء الوقت بدون شبكة ولا نشاط قاعدة بيانات ، ويكرر نفس مسار الكود في ملف تعريف. | إصلاح الحلقة. رفع الحد هنا يعني فقط أن الموقع عالق لفترة أطول قبل أن يستسلم. |
الإصلاح خطوة بخطوة.
تفترض الأوامر توفر WP-CLI والوصول إلى سطر الأوامر. إن لم يتوفرا، تشرح كل خطوة الإجراء كي تنفذه من لوحة التحكم أو عبر SFTP.
معرفة أي حد ينطبق حيث
عادةً لا يشارك سطر الأوامر وطلب الويب قيمة.
php -i | grep max_execution_time php -r 'echo ini_get("max_execution_time"), PHP_EOL;'نقل الوظيفة إلى حيث لا ينطبق الحد الأقصى
WP-CLI يعمل دون ساعة الحائط فوقه ، وهذا هو السبب في أن الوظائف الطويلة تنتمي إلى هناك.
wp plugin install some-plugin --activate
إذا كان يجب أن تعمل في طلب، رفعه لهذا المسار فقط
نطاقها إلى سياق المشرف بدلا من كل شيء يخدم الموقع.
wp config set WP_MEMORY_LIMIT '256M'
تحقق مما إذا كان الوقت يخرج
إذا كان البرنامج النصي ينتظر على خادم شخص آخر ، فإن الحد الأقصى ليس هو الشيء الذي يجب تغييره.
wp eval 'var_dump( wp_remote_get( "https://example.com", [ "timeout" => 5 ] ) );'
تأكيد الآن انتهاء
قم بتشغيل نفس الوظيفة مرة أخرى وشاهدها كاملة بدلاً من افتراض أنها ستفعل.
time wp cron event run --due-now
ما تتولاه المنصة عنك.
يتم رفع حدود التنفيذ لسياقات المشرف والكرونة وتركها حيث تنتمي لطلبات الويب ، لذلك فإن الاستيراد لديه مساحة لإنهاء دون السماح أيضًا بتشغيل صفحة عامة لمدة دقائق. تتوفر WP-CLI في كل خطة للوظائف التي لا ينبغي أن تكون في علامة تبويب المتصفح ، ويتم تشغيل العمل المجدول على جدولة حقيقية بدلاً من تحميل صفحة شخص ما.
الأسئلة الشائعة.
لماذا الحد الأقصى هو 30 ثانية؟
هل ينطبق الحد الأقصى على WP-CLI؟
لقد أثرت ذلك والوظيفة لا تزال تفشل في نفس النقطة.
هل هذا هو نفس 504؟
إن لم يكن هذا هو السبب.
قد تبدو هذه الأخطاء متشابهة في المتصفح.