דילוג לתוכן
תצורה

להגדיל את נפח ההעלאה המקסימלי בוורדפרס

שלושה הגדרות שולטות במגבלת ההעלאה של וורדפרס, וכולן חייבות להסכים זו עם זו. המגבלה בפועל היא הנמוכה מבין upload_max_filesize, post_max_size,

פורסם

שלוש הגדרות שולטות במגבלת ההעלאה של וורדפרס, וכולן חייבות להסכים זו עם זו. המגבלה בפועל היא הנמוכה מבין upload_max_filesize, post_max_size, ומגבלת הבקשה של שרת האינטרנט שלך. אם תעלה אחת מהן ותשאיר את השתיים האחרות נמוכות, שום דבר לא ישתנה — וזו בדיוק הסיבה שרוב האנשים מסיקים שהתיקון שלהם “לא עבד”. בדוק קודם את הערכים הנוכחיים שלך עם כלי נפח ההעלאה המקסימלי של וורדפרס; הוא קורא את אותם ערכים שוורדפרס מדווח עליהם ומראה לך איזו מהן מעכבת אותך.

למה המגבלה קיימת ואיפה היא יושבת

וורדפרס לא קובע את מגבלת ההעלאה. הוא רק מדווח עליה. כשאתה רואה “The uploaded file exceeds the upload_max_filesize directive in php.ini”, ההודעה הזו מגיעה ישירות מ-PHP.

שלושה ערכים נפרדים חוסמים העלאה, והתקרה האמיתית היא זה שהכי נמוך:

  • upload_max_filesize (PHP) — הקובץ הבודד הגדול ביותר ש-PHP יקבל.
  • post_max_size (PHP) — גוף ה-POST הכולל הגדול ביותר. הקובץ שלך נוסע בתוך בקשת ה-POST יחד עם שדות טופס אחרים, ולכן הערך הזה חייב להיות גדול מ-upload_max_filesize.
  • מגבלת גוף הבקשה של שרת האינטרנטclient_max_body_size ב-Nginx, או LimitRequestBody ב-Apache. הערך הזה חי לגמרי מחוץ ל-PHP, ולכן תיקונים שנוגעים רק ב-PHP נכשלים בשקט מאחורי Nginx.

ערך רביעי, max_execution_time, לא מגביל את הגודל אבל יעצור העלאה גדולה ואיטית באמצע התהליך בחיבור חלש. זו תופעה נפרדת, לא חלק מתקרת הגודל.

המלכודת: אתה מגדיר upload_max_filesize = 256M, טוען מחדש, ועדיין לא מצליח להעלות קובץ של 100 MB — כי post_max_size עדיין 8M. PHP דוחה את הבקשה על בסיס הגוף הכולל עוד לפני שהוא בכלל בודק את הקובץ. המגבלה לא התעלמה ממך. מגבלה אחרת תפסה אותה קודם.

איך לתקן את זה, לפי הסדר

עבוד מהסיכוי הגבוה ביותר להצליח ועד למוצא האחרון.

1. ערוך את php.ini (המקום הנכון). מצא את הקובץ שהאתר שלך באמת טוען — הרץ עמוד עם <?php phpinfo(); וקרא את “Loaded Configuration File”, או שאל את חברת האחסון שלך. הגדר את שני ערכי ה-PHP, ושמור על post_max_size גדול מ-upload_max_filesize:

upload_max_filesize = 256M
post_max_size = 260M
max_execution_time = 300

הפעל מחדש את PHP-FPM (sudo systemctl restart php8.2-fpm) או את Apache. שינויים לא עושים כלום עד שתהליך ה-PHP מופעל מחדש.

2. אין לך גישה ל-php.ini? השתמש ב-.htaccess (Apache + mod_php בלבד). הוסף לקובץ ה-.htaccess בשורש של וורדפרס:

php_value upload_max_filesize 256M
php_value post_max_size 260M
php_value max_execution_time 300

זה עובד רק כש-PHP רץ כמודול של Apache. תחת PHP-FPM, CGI, או FastCGI, php_value יזרוק שגיאת 500 — הכישלון הזה אומר שאתה בכיוון הלא נכון, לא שהמספר שגוי. עבור ל-.user.ini:

upload_max_filesize = 256M
post_max_size = 260M

3. העלה את מגבלת שרת האינטרנט — השלב שכולם שוכחים. ב-Nginx, PHP בכלל לא רואה בקשה גדולה מדי; Nginx מחזיר 413 Request Entity Too Large קודם. בבלוק השרת שלך:

client_max_body_size 256M;

טען מחדש עם sudo nginx -t && sudo systemctl reload nginx. אם אתה על Nginx והעריכות שלך ב-PHP “לא עשו כלום”, זו כמעט תמיד הסיבה.

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

מה לא לעשות

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

@ini_set( 'upload_max_filesize' , '256M' );

upload_max_filesize הוא PHP_INI_PERDIR. אי אפשר לשנות אותו מ-PHP בזמן ריצה עם ini_set(). הוא מקבל ערכים חדשים רק מ-php.ini, .htaccess, או .user.ini — לעולם לא מקוד של האפליקציה. השורה רצה בלי שגיאה ולא עושה כלום, מה שהופך אותה לאחת מהעצות השגויות שנמסרות בביטחון רב יותר מכל אחרת בוורדפרס.

אל תדביק גם @ini_set('post_max_size', ...) — אותה הגבלה, אותו כלום שקט.

אל תגדיר WP_MEMORY_LIMIT ותחשוב שזו מגבלת ההעלאה. זה שולט בתקרת הזיכרון של PHP להרצת קוד. אין לזה שום קשר לגודל הקובץ שהשרת מקבל.

אל תעצור בקובץ אחד. הכישלון הכי נפוץ הוא שינוי upload_max_filesize לבדו והכרזה שהתיקון שבור. שנה את כל השלושה, ושמור על post_max_size מעל upload_max_filesize.

אל תגדיר מגבלות גבוהות בצורה מוגזמת “ליתר ביטחון”. מגבלה של 2 GB מזמינה בעיות של מיצוי משאבים ולא עוזרת — אם אתה באמת צריך קבצים בגודל מספר ג’יגה-בייט, העלה אותם מחוץ לדפדפן (SFTP, או תוסף להעלאה מחולקת) במקום לדחוף אותם דרך POST יחיד של PHP.

עדיין תקוע?

אם כל שלושת הערכים הועלו ואתה עדיין נתקל בקיר, הבקשה מוגבלת אי-שם במעלה הזרם של השרת שלך: CDN או proxy (לוח הבקרה של Cloudflare מגביל את גודל גוף ההעלאה בעצמו), מגבלת פלטפורמה של חברת אחסון מנוהלת שמתעלמת מה-php.ini שלך, או .user.ini שעדיין לא רוענן — הוא מכבד את user_ini.cache_ttl של PHP, ולכן הוא יכול להשתהות כמה דקות אחרי ששמרת. ודא מה השרת באמת מדווח, לא מה שכתבת בקובץ, ותקן את השכבה שעדיין נמוכה. כשהמספר המדווח סוף סוף תואם ליעד שלך, ההעלאה עובדת.