חיפוש ]

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

הקובץ wp-config.php משמש אותנו להגדרת שם מסד הנתונים של וורדפרס, שם המשתמש, הסיסמה והמיקום שלו (כמו גם קידומת הטבלאות, מפתחות אבטחה והשפה).

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

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

הנה תמונה של קובץ wp-config.php טיפוסי הנקרא במילים אחרות WordPress Configuration File:

אופטימיזציה wp-config.php

בואו נראה מספר הגדרות או ״אופטימיזציות״ שניתן לבצע דרך קובץ זה:

1. הגדרות מסד נתונים

ארבעת הגדרות אלו נחוצות על מנת שוורדפרס תוכל להתחבר למסד הנתונים:

define('DB_NAME', 'database-name');
define('DB_USER', 'database-username');
define('DB_PASSWORD', 'database-password');
define('DB_HOST', 'localhost');

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

ניתן אף לקבוע פורט אחר לשרת של מסד הנתונים, הנה שתי דוגמאות:

define('DB_HOST', 'localhost:1234');
define('DB_HOST', 'mysql.domain.tld:1234');

עוד טריק נחמד הוא לזהות את שרת מסד הנתונים בצורה אוטומטית:

define('DB_HOST', $_ENV{DATABASE_SERVER});

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

2. מסד הנתונים – Collation & Character Set

מגירסת וורדפרס 2.2, יש באפשרותכם לקבוע את ה Character Set של טבלאות ה MySQL. בגדול אין צורך לגעת בהגדרה זה מכיוון וברירת המחדל היא UTF-8 וזו הגדרה אשר תומכת בכל השפות. הנה ההגדרה המומלצת (הגדרת ברירת המחדל):

define('DB_CHARSET', 'utf8');

וורדפרס בגירסה 2.2 ומעלה מאפשרת לכם גם לקבוע את ה Collation, הגדרה זו אחראית על הסדר (sort order) של ה character set במסד הנתונים. הגדרה זו בדרך כלל מתבצעת אוטומטית על ידי MySQL בהתאם ל character set ומתאפשרת על ידי השארת ערך ריק בהגדרה זו. הנה ערך ברירת המחדל המומלץ:

define('DB_COLLATE', '');

הערה: השתמשו/שנו בשתי הגדרות אלו אך ורק במידה והם כבר קיימות בקובץ wp-config.php.

3. מפתחות אבטחה

וורדפרס משתמשת בשמונה מפתחות אבטחה (keys ו-salts) שנועדו להצפנה טובה יותר של עוגיות (cookies). מפתחות אלו עובדות בשקט מאחורי הקלעים ואמורות להיות כמה שיותר רנדומליות ומסובכות. הדרך הפשוטה ביותר ליצור מפתחות אלו בצורה אוטומטית היא על ידי השירות WordPress.org secret-key service.

פשוט בקרו בקישור והעתיקו את התוצאה לקובץ wp-config.php בהתקנת הוורדפרס שלכם.

ניתן לשנות מפתחות אלו בכל עת. שינוי המפתחות יבטל את כל ה-cookies הקיימים ויאלץ את כל המשתמשים המחוברים להתחבר מחדש.

define('AUTH_KEY',         '_;*Yfw@]Qr#[|YDl-v$pXkPZ^;Ac&YC:|s]-pw`qJYDM<[Z7!%V66bWLu_Qr]MKF');
define('SECURE_AUTH_KEY',  'FF@{y)vPLNmMiIWW~7+fN7Zf7e9Jw37HyGRf9=$`0kg%cKrG33kkJ5 jpE6Ox)8*');
define('LOGGED_IN_KEY',    'q!0/8%dcC6Ey<t)[*r+/W/3R2L&V:=BM<zuAC!#bt&![hIu0@TgF+nqGp)aBLl-2');
define('NONCE_KEY',        'kIHaSGF92lbRElp/UZ4<)@?xoIDaxlve|]oY+53UG.v=g/[.3wz,/|yP-yhc2-aD');

4. קידומת הטבלאות במסד הנתונים

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

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

table_prefix  = 'wp_';

שינוי הקידומת למשהו כמו sVVV_ מוסיף שכבת הסתרה נוספת. למרות שזה לא יעצור תוקף נחוש, זה יכול למנוע סקריפטים אוטומטיים של SQL Injection המכוונים לקידומת ברירת המחדל wp_.

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

$table_prefix  = 'wp1_'; // first blog
$table_prefix  = 'wp2_'; // second blog
$table_prefix  = 'wp3_'; // third blog

5. הגדרות שפה

וורדפרס מאפשרת לכם להגדיר את קובץ התרגום של השפה בה אתם משתמשים באתר. קובץ התרגום הוא קובץ .mo ומיקום ברירת המחדל שלו הוא wp-content/languages (עם wp-includes/languages כמקור חלופי):

define('WPLANG', '');
define('LANGDIR', '');

6. הגדרות הספרייה

זו אינה הגדרה שאתם צריכים לגעת בה. קוד זה מגיע עם הקובץ wp-config.php ומכיל מספר שורות המגדירות את הנתיב האבסולוטי (absolute path) ואת קובץ ההגדרות wp-settings.php.

/** WordPress absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
	define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

7. כתובת הבלוג וכתובת האתר

זהו החלק היותר מעניין… 🙂  שתי ההגדרות הבאות אינן מופיעות ב wp-config.php כברירת מחדל, אך יש להוסיף אותן על מנת לשפר את הביצועים של אתר הוורדפרס שלכם – בצורה מזערית יש לציין. הגדרות אלו נוספו בוורדפרס 2.2 ודורסות את ההגדרות הנמצאות במסד הנתונים (בלי לשנות אותם בפועל).

הוספת הגדרות אלו מקטינה את מספר הקריאות למסד הנתונים. וודאו שהן זהות לערכים בלוח הבקרה של וורדפרס (שימו לב: ללא "/" בסוף):

define('WP_HOME', 'https://savvy.co.il');
define('WP_SITEURL', 'https://savvy.co.il');

הטריק הבא משתמש במשתנה $_SERVER['HTTP_HOST']. בעוד שזה נוח לפיתוח, הימנעו משימוש בו בסביבת ייצור מכיוון שתוקפים יכולים לזייף ערך זה.

ניתן גם לקבוע הגדרות אלו באופן דינמי באמצעות המשתנה הגלובלי $_SERVER:

define('WP_HOME', 'http://'.$_SERVER['HTTP_HOST'].'/path/to/wordpress');
define('WP_SITEURL', 'http://'.$_SERVER['HTTP_HOST'].'/path/to/wordpress');

8. נתיב ה template ונתיב ה stylesheet

מאותה סיבה, ניתן לבטל קריאות מיותרות למסד הנתונים לקבלת ה-template path וה-stylesheet path. הנה הגדרות ברירת המחדל:

define('TEMPLATEPATH', get_template_directory());
define('STYLESHEETPATH', get_stylesheet_directory());

כמו שהן, הו עדיין מבצעות קריאה למסד הנתונים, אך ניתן לוותר על קריאות מיותרות אלו באמצעות כתיבת הנתיבים בקוד:

define('TEMPLATEPATH', '/absolute/path/to/wp-content/themes/active-theme');
define('STYLESHEETPATH', '/absolute/path/to/wp-content/themes/active-theme');

9. הגדרת דומיין לעוגיות (Cookies)

הגדרה זו מיועדת לאלו עם הגדרת דומיין לא סטנדרטית. לדוגמה, אם אתם משתמשים בסאבדומיין להגשת תכנים סטטיים (תמונות, CSS, JavaScript), תוכלו להגדיר כי Cookies יישלחו רק בדומיין הראשי.

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

יש לכך השפעה לא מבוטלת על הביצועים של אתר הוורדפרס שלכם.

define( 'COOKIE_DOMAIN', 'www.example.com' );

10 .דריסת הרשאות של קבצים ותיקיות

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

define('FS_CHMOD_FILE', 0755);
define('FS_CHMOD_DIR', 0755);

11. טבלאות user & usermeta מותאמות

מה לגבי שינוי הטבלאות האחראיות על המשתמשים במסד הנתונים? ניתן לשנות אלו על ידי שימוש בקוד הבא:

define('CUSTOM_USER_TABLE', $table_prefix.'my_users');
define('CUSTOM_USER_META_TABLE', $table_prefix.'my_usermeta');

12. שינוי המיקום של התיקייה wp-content

מגירסת וורדפרס 2.6 ומעלה, ניתן לשנות את מיקום ברירת המחדל של התיקייה wp-content. ישנן מספר סיבות לעשות כגון אבטחת אתר הוורדפרס שלכם, ועדכוני FTP. הנה דוגמאות:

// full local path of current directory (no trailing slash)
define('WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'].'/path/wp-content');

// full URI of current directory (no trailing slash)
define('WP_CONTENT_URL', 'http://domain.tld/path/wp-content');

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

// full local path of current directory (no trailing slash)
define('WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'].'/path/wp-content/plugins');

// full URI of current directory (no trailing slash)
define('WP_PLUGIN_URL', 'http://domain.tld/path/wp-content/plugins');

13. גרסאות פוסטים

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

להגביל את מספר הגירסאות שנשמרות

define('WP_POST_REVISIONS', 3); // integer

לבטל את הפונקציונליות של גירסאות פוסטים

define('WP_POST_REVISIONS', false);

14. קביעת הזמן בין שמירה אוטומטית של פוסטים

כברירת מחדל וורדפרס שומרת גרסה של פוסט כל 60 שניות. ניתן לשנות מרווח זה:

define('AUTOSAVE_INTERVAL', 160); // in seconds

15. לאפשר העלאה של כל סוגי הקבצים למנהלי מערכת

וורדפרס מגבילה את סוגי הקבצים שניתן להעלות לספריית המדיה. ניתן לאפשר העלאה של כל סוגי הקבצים למנהלי מערכת:

define( 'ALLOW_UNFILTERED_UPLOADS', true );

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

16. הוספת ״פח אשפה״ (Trash) לספריית המדיה

כברירת מחדל, מחיקת תמונה בספריית המדיה היא סופית. ניתן להפעיל פח אשפה לספריית המדיה:

define( 'MEDIA_TRASH', true );

כך תוכלו לשחזר קבצי מדיה שנמחקו בטעות.

17. מעקב אחר שגיאות – Debugging

וורדפרס כוללת מצב debugging מובנה המציג הודעות שגיאה והתראות על פונקציות שנזנחו (Deprecated). כברירת מחדל, debugging מושבת בסביבת ייצור:

define('WP_DEBUG', true); // enable debugging mode
define('WP_DEBUG', false); // disable debugging mode (default)

אני ממליץ לכם לתת מבט המאמר הבא המסביר על דרך נכונה יותר לבצע debug לוורדפרס באמצעות WP_DEBUG_LOG.

18. הגדלת זיכרון – Increase PHP Memory

אם אתם מקבלים הודעת שגיאה בסגנון  “Allowed memory size of xxx bytes exhausted״, הגדרה זו יכולה לפתור את הבעיה. ההגדרה WP_MEMORY_LIMIT מאפשרת לכם לקבוע את כמות הזיכרון הזמין לשימוש לטובת PHP. כברירת מחדל, וורדפרס מנסה לקבוע הגדרה זו כ 32MB, כך שהגדרה זו נחוצה אך ורק לערך גבוה מכך.

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

define('WP_MEMORY_LIMIT', '64M');
define('WP_MEMORY_LIMIT', '96M');
define('WP_MEMORY_LIMIT', '128M');

19. שמירה והצגה של הקריאות למסד הנתונים לצורך ניתוח

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

define('SAVEQUERIES', true);

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

// display the query array for admin only
if (current_user_can('level_10')) {
	global $wpdb;
	echo "<pre>";
	print_r($wpdb->queries);
	echo "</pre>";
}

20. ביטול האפשרות לערוך קבצים בלוח הבקרה של וורדפרס

וורדפרס כוללת עורך קבצים מובנה (לוח הבקרה > עיצוב > ערוך) המאפשר עריכת קבצי תוספים ותבניות. ביטול אפשרות זו הוא צעד מומלץ לחיזוק אבטחת האתר:

define(‘DISALLOW_FILE_EDIT’,true);

21. איחוד קבצים בממשק הניהול

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

define( 'CONCATENATE_SCRIPTS', false );

22. אילוץ SSL בלוח הבקרה

אם לאתר שלכם יש תעודת SSL, ניתן לאלץ את כל ההתחברויות ללוח הבקרה להשתמש ב-HTTPS:

define( 'FORCE_SSL_ADMIN', true );

כך תבטיחו שפרטי ההתחברות וה-cookies מועברים תמיד בחיבור מוצפן.

23. מניעת התקנת תוספים ותבניות

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

define( 'DISALLOW_FILE_MODS', true );

שימושי לסביבות ייצור בהן כל השינויים צריכים לעבור דרך מערכת ניהול גרסאות או תהליך deployment.

24. הגדרת סוג סביבת וורדפרס

מגרסת וורדפרס 5.5, ניתן להגדיר את סוג הסביבה של ההתקנה. כך תוספים ותבניות יכולים להתאים את ההתנהגות שלהם בהתאם:

define( 'WP_ENVIRONMENT_TYPE', 'production' ); // local, development, staging, or production

לדוגמה, כאשר מוגדר production, וורדפרס משביתה את הצגת שגיאות קריטיות. במצב development, WP_DEBUG מופעל כברירת מחדל.

25. העברת wp-config.php מעל תיקיית האתר

לשכבת אבטחה נוספת, ניתן להעביר את קובץ wp-config.php תיקייה אחת מעל התקנת הוורדפרס. וורדפרס בודקת אוטומטית את התיקייה ההורה, כך שאין צורך בהגדרה נוספת.

כך נמנעת גישת HTTP ישירה לקובץ, גם אם עיבוד ה-PHP בשרת נכשל. בשילוב עם הרשאות קובץ נכונות (600 או 640), זהו צעד אבטחה מומלץ.

שאלות נפוצות

היכן נמצא קובץ wp-config.php?
קובץ wp-config.php נמצא בתיקיית השורש של התקנת הוורדפרס. ניתן לגשת אליו דרך FTP, מנהל הקבצים של חברת האחסון, או SSH. לאבטחה נוספת, ניתן להעביר אותו תיקייה אחת מעל תיקיית האתר - וורדפרס תזהה אותו שם אוטומטית.
האם בטוח לערוך את wp-config.php?
כן, אך תמיד צרו גיבוי של הקובץ לפני ביצוע שינויים. שגיאת תחביר ב-wp-config.php יכולה להפיל את האתר כולו. השתמשו בעורך טקסט פשוט (לא מעבד תמלילים) ובדקו שינויים בסביבת staging לפני החלתם בסביבת הייצור.
מה ההבדל בין DISALLOW_FILE_EDIT ל-DISALLOW_FILE_MODS?
DISALLOW_FILE_EDIT מסיר רק את עורך הקבצים המובנה מלוח הבקרה של וורדפרס. DISALLOW_FILE_MODS מגביל יותר - הוא גם מונע התקנה, עדכון ומחיקה של תוספים ותבניות דרך לוח הבקרה. השתמשו ב-DISALLOW_FILE_MODS בסביבות ייצור בהן כל השינויים צריכים לעבור דרך תהליך deployment.
האם כדאי להפעיל WP_DEBUG באתר חי?
לא. הצגת מידע debug באתר חי יכולה לחשוף מידע רגיש לגולשים ולתוקפים. במקום זאת, השתמשו ב-WP_DEBUG_LOG לכתיבת שגיאות לקובץ לוג, והגדירו WP_DEBUG_DISPLAY ל-false. כך תוכלו לעקוב אחר שגיאות מבלי לחשוף אותן לציבור.
כמה גרסאות פוסטים כדאי לשמור?
איזון טוב הוא 3 עד 10 גרסאות. כך יש לכם מספיק היסטוריה לשחזור טעויות מבלי לנפח את מסד הנתונים. לאתרים עם כותבים רבים או עריכות תכופות, שמירת גרסאות נוספות עשויה להיות שימושית. לאתרים פשוטים, 3 עד 5 בדרך כלל מספיק.

לסיכום

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

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

דיון ותגובות
2 תגובות  ]
  • Rubb 8 אוקטובר 2017, 8:32

    מאמר מדהים כמו תמיד.
    שאלה לגבי הקידומת של הטבלה, אני תמיד משנה את זה למשהו של 4 אותיות, השם הזה יכול לקבל גם ספרות? מה לגבי תווים מיוחדים?

    • רועי יוסף 8 אוקטובר 2017, 9:43

      לא ניתן להשתמש בתווים מיוחדים. אותיות, מספרים וקווים תחתונים בלבד..

השאירו תגובה

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

Savvy WordPress Development official logo