כיצד להגדיל Maximum Execution Time באתרי וורדפרס

אם נתקלתם בהודעה "Maximum execution time of 30 seconds exceeded", פירוש הדבר שסקריפט PHP רץ יותר זמן מהמותר לפי ההגדרה max_execution_time. בוורדפרס זה קורה בדרך כלל בזמן עדכונים, ייבוא תוכן וגיבויים.

בפוסט הזה תמצאו את הדרכים להגדיל את max_execution_time, ואיך לדעת באיזו מהן השרת שלכם תומך. לפתרון מהיר של השגיאה עצמה, הציצו בסניפט תיקון השגיאה Maximum Execution Time Exceeded בוורדפרס.

בדקו קודם את הערך הנוכחי

היכנסו אל כלים > בריאות האתר > מידע ופתחו את החלק שרת (Server).

  • PHP time limit הוא הערך הנוכחי של max_execution_time בשניות.
  • PHP SAPI מראה לכם איזו שיטה תעבוד: apache2handler הוא Apache mod_php, fpm-fcgi הוא PHP-FPM ו-litespeed הוא LiteSpeed.

חזרו למסך הזה אחרי כל שינוי כדי לוודא ש-PHP אכן קלט את הערך החדש.

הגדלת max_execution_time בוורדפרס

בחרו את השיטה שמתאימה ל-PHP SAPI שלכם. בדוגמאות נשתמש ב-300 שניות, מגבלה זהה לזו שליבת וורדפרס מגדירה לעצמה בזמן עדכונים.

1. wp-config.php (עובד בכל שרת)

הוסיפו את הקוד הבא לקובץ wp-config.php, מעל השורה /* That's all, stop editing! */:

if ( function_exists( 'set_time_limit' ) ) {
	set_time_limit( 300 );
}

אל תוותרו על הבדיקה function_exists(). החל מ-PHP 8, פונקציה שנחסמה באמצעות disable_functions נחשבת כלא מוגדרת, כך שקריאה ישירה אליה תפיל את האתר אצל חברות אחסון שחוסמות אותה.

2. .user.ini (PHP-FPM ו-CGI)

ב-PHP-FPM (התצורה הנפוצה ביותר כיום), צרו קובץ .user.ini באותה תיקייה שבה נמצא wp-config.php:

max_execution_time = 300
max_input_time = 300

כברירת מחדל, PHP קורא את הקובץ מחדש כל 5 דקות (user_ini.cache_ttl), כך שייתכן שהשינוי לא ייכנס לתוקף מיד.

3. .htaccess (Apache mod_php או LiteSpeed)

גבו קודם את הקובץ .htaccess, ולאחר מכן הוסיפו את השורה הבאה:

php_value max_execution_time 300

השיטה הזו עובדת רק עם Apache mod_php או LiteSpeed. ב-Apache עם PHP-FPM ההנחיה php_value אינה מוכרת, והאתר יחזיר שגיאת 500. במקרה כזה הסירו אותה והשתמשו ב-.user.ini.

4. php.ini (שרת VPS או שרת ייעודי)

אם יש לכם שליטה על השרת, הגדירו את הערך ב-php.ini והפעילו מחדש את PHP-FPM או את Apache. באחסון משותף השתמשו במסך הגדרות ה-PHP בלוח הבקרה של חברת האחסון.

max_execution_time = 300

איך max_execution_time עובד

ההנחיה קובעת כמה שניות סקריפט רשאי לרוץ (30 כברירת מחדל). קריאה ל-set_time_limit() משנה את המגבלה בזמן ריצה ומאפסת את המונה.

בלינוקס, גרסאות PHP הסטנדרטיות סופרות רק את זמן הריצה של הסקריפט עצמו. שאילתות למסד הנתונים וקריאות API מרוחקות אינן נספרות, כך שבקשה יכולה לרוץ יותר מ-30 שניות בלי שתופיע השגיאה הזו.

max_input_time היא מגבלה נפרדת לעיבוד הקלט של הבקשה (למשל נתוני POST והעלאת קבצים). ערך ברירת המחדל שלה הוא -1, כלומר היא משתמשת בערך של max_execution_time. לא ניתן לשנות אותה עם set_time_limit() או ini_set(), אלא רק ב-.user.ini, ב-.htaccess או ב-php.ini.

כשהגדלת המגבלה של PHP אינה מספיקה

אם בקשות ארוכות עדיין נקטעות גם אחרי שהגדלתם את המגבלה, שכבה אחרת היא שעוצרת אותן, בדרך כלל עם שגיאת 502, 504 או 524.

  • ההגדרה request_terminate_timeout של PHP-FPM הורגת את ה-worker אחרי זמן מוגדר. היא כבויה כברירת מחדל, אך חברות אחסון רבות מפעילות אותה.
  • ערך ברירת המחדל של fastcgi_read_timeout ב-Nginx הוא 60 שניות.
  • Cloudflare מחזירה שגיאת 524 אם שרת המקור לא מגיב תוך 125 שניות (בחבילות שאינן Enterprise).

רק חברת האחסון יכולה להגדיל את הערכים האלה. למשימות כבדות חד פעמיות השתמשו ב-WP-CLI: בשורת הפקודה ערך ברירת המחדל של max_execution_time הוא 0, כלומר אין מגבלה כלל.

WP-Cron רץ כבקשת web רגילה, ולכן גם עליו חלות אותן מגבלות. למשימות מתוזמנות ארוכות, בטלו את WP-Cron והשתמשו ב-cron job אמיתי בשרת שמריץ את wp cron event run --due-now.

הציצו גם בפוסט אופטימיזציה לקונפיגורציה של וורדפרס באמצעות wp-config.php ובתיעוד ההנחיה במדריך של PHP.

שאלות נפוצות

הנה כמה שאלות נפוצות על מגבלת הזמן של PHP בוורדפרס:

מהו ערך ברירת המחדל של max_execution_time בוורדפרס?
וורדפרס לא מגדירה ערך גלובלי. היא יורשת את הגדרת ה-PHP, שברירת המחדל שלה היא 30 שניות, אם כי חברות אחסון רבות משתמשות בערך שבין 60 ל-300. ליבת וורדפרס מגדילה את המגבלה באופן זמני עם set_time_limit() בזמן עדכונים.
למה php_value max_execution_time ב-.htaccess לא עובד?
רק Apache mod_php ו-LiteSpeed מכירים את ההנחיה php_value. ב-PHP-FPM היא גורמת לשגיאת 500. בדקו את PHP SAPI במסך בריאות האתר, ואם מופיע שם fpm-fcgi השתמשו ב-.user.ini.
כיצד מגדילים את max_input_time בוורדפרס?
הגדירו max_input_time = 300 ב-.user.ini או ב-php.ini, או php_value max_input_time 300 ב-.htaccess כאשר השרת עובד עם mod_php. לא ניתן לשנות אותה מתוך wp-config.php מכיוון ש-PHP לא מאפשר זאת בזמן ריצה.
האם אפשר להגדיר את max_execution_time ל-0?
כן, הערך 0 מבטל את המגבלה של PHP. עם זאת, סקריפט שנתקע יחזיק אז את ה-worker של PHP עד ש-timeout ברמת השרת יעצור אותו. ערך סופי כמו 300 בטוח יותר באתר חי.
דיון ותגובות
[  0 תגובות  ]

השאירו תגובה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...