ไฟล์ wp-config.php ของ WordPress: หน้าที่และวิธีแก้ไข
wp-config.php เก็บข้อมูลเข้าฐานข้อมูล คีย์ความปลอดภัย และการตั้งค่า WordPress ดูว่าไฟล์อยู่ที่ไหน แต่ละส่วนทำอะไร และแก้ไขอย่างไรให้ปลอดภัย
wp-config.php คือไฟล์ที่บอก WordPress ว่าจะเชื่อมต่อฐานข้อมูลอย่างไรและจะทำงานอย่างไร โดยปกติไฟล์นี้อยู่ในโฟลเดอร์รูทของการติดตั้ง ข้างๆ wp-admin และ wp-content คุณเพิ่มหรือเปลี่ยนการตั้งค่าได้อย่างปลอดภัยเหนือบรรทัด “That’s all, stop editing!” (แปลว่า “เท่านี้แหละ หยุดแก้ไขได้แล้ว!”) และควรปล่อยบล็อกโค้ดสองบล็อกใต้บรรทัดนั้นไว้ตามเดิม สำรองไฟล์ก่อนเสมอ เพราะการพิมพ์ผิดเพียงจุดเดียวอาจทำให้ทั้งไซต์ล่มได้
สิ่งสำคัญ
- ไฟล์นี้เก็บรหัสผ่านฐานข้อมูลและคีย์ความปลอดภัย จึงควรดูแลเหมือนรหัสผ่าน และห้ามโพสต์เนื้อหาในไฟล์ลงฟอรัมหรือแชตฝ่ายสนับสนุนเด็ดขาด
- การตั้งค่าที่กำหนดเองต้องอยู่เหนือบรรทัด “stop editing” บรรทัดสุดท้ายด้านล่างจะโหลด WordPress และการตั้งค่าที่อยู่หลังบรรทัดนั้นจะมาช้าเกินไป
- WordPress ที่คุณดาวน์โหลดมีไฟล์
wp-config-sample.phpส่วนwp-config.phpตัวจริงจะถูกสร้างระหว่างการติดตั้ง- อย่าเปลี่ยน
$table_prefixบนไซต์ที่ใช้งานจริงด้วยการแก้บรรทัดนั้นเพียงบรรทัดเดียว WordPress จะทำงานเหมือนยังไม่ได้ติดตั้ง
หา wp-config.php ได้ที่ไหน
เชื่อมต่อผ่าน SFTP หรือเปิดตัวจัดการไฟล์ของโฮสติ้ง แล้วไปที่โฟลเดอร์ที่มี wp-admin, wp-includes และ wp-content เอกสารของ WordPress เรียกโฟลเดอร์นี้ว่ารูทของไดเรกทอรีไฟล์ WordPress
ถ้าไม่พบไฟล์ที่นั่น ให้ดูเหนือขึ้นไปหนึ่งโฟลเดอร์ ตัวโหลดของ WordPress จะตรวจโฟลเดอร์ติดตั้งก่อน แล้วจึงตรวจโฟลเดอร์แม่ และจะข้ามโฟลเดอร์แม่หากโฟลเดอร์นั้นมี wp-settings.php ของตัวเอง เพราะแสดงว่ามี WordPress อีกชุดติดตั้งอยู่ที่นั่น
ถ้าทั้งสองที่ไม่มีไฟล์ WordPress จะส่งผู้เข้าชมไปยังหน้าจอการติดตั้ง หน้าจอนั้นจะสร้างไฟล์ จาก wp-config-sample.php และเมื่อเขียนลงโฟลเดอร์ไม่ได้ ก็จะแสดงข้อความให้คุณวางลงในไฟล์ใหม่ด้วยมือ
แต่ละส่วนเริ่มต้นทำอะไร
wp-config-sample.php คือไฟล์แม่แบบ และมีส่วนต่างๆ ตามลำดับนี้:
| ส่วน | เก็บอะไร | เปลี่ยนได้ไหม? |
|---|---|---|
DB_NAME, DB_USER, DB_PASSWORD, DB_HOST | ข้อมูลเข้าฐานข้อมูล ไฟล์แม่แบบใช้ localhost เป็นโฮสต์ และผู้ให้บริการโฮสติ้งสามารถแจ้งค่าจริงให้คุณได้ | ได้ เมื่อข้อมูลฐานข้อมูลเปลี่ยน ค่าที่ผิดทำให้เกิดข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล |
DB_CHARSET, DB_COLLATE | วิธีจัดเก็บข้อความในฐานข้อมูล ค่าเริ่มต้นคือ utf8mb4 และค่าว่าง | คอมเมนต์ของ DB_COLLATE ในไฟล์แม่แบบบอกว่าอย่าเปลี่ยนหากไม่แน่ใจ |
ตั้งแต่ AUTH_KEY ถึง NONCE_SALT | คีย์และ salt ความปลอดภัยแปดตัวที่ใช้กับคุกกี้การเข้าสู่ระบบ | ได้ การเปลี่ยนจะทำให้ผู้ใช้ทุกคนออกจากระบบ |
$table_prefix | ข้อความนำหน้าชื่อตารางฐานข้อมูลแต่ละตาราง ค่าเริ่มต้นคือ wp_ | เฉพาะตอนติดตั้ง เว้นแต่คุณจะเปลี่ยนชื่อตารางและอัปเดตรายการที่บันทึกไว้ในฐานข้อมูลซึ่งมีคำนำหน้านี้ในชื่อด้วย |
WP_DEBUG | โหมดดีบัก ตั้งเป็น false ในไฟล์แม่แบบ | ได้ คู่มือตำแหน่งไฟล์บันทึกดีบัก แสดงวิธีส่งข้อผิดพลาดไปยังไฟล์ |
| คอมเมนต์ “custom values” (ค่าที่กำหนดเอง) | พื้นที่ว่างสำหรับการตั้งค่าของคุณ ซึ่งจบที่บรรทัด “stop editing” | ได้ ส่วนที่คุณเพิ่มเข้ามาอยู่ตรงนี้ |
ABSPATH และบรรทัด wp-settings.php | พาธไปยัง WordPress แล้วตามด้วยบรรทัดที่โหลดส่วนที่เหลือ | ไม่ได้ ปล่อยไว้ตามเดิม |
ขอคีย์ใหม่ได้ในคลิกเดียว: บริการคีย์ลับของ WordPress.org จะให้ชุดใหม่ทุกครั้งที่โหลด แทนที่ทั้งแปดบรรทัดด้วยชุดใหม่นั้น
ไฟล์รุ่นเก่าอาจไม่มีคอมเมนต์ “custom values” และเขียนว่า “Happy blogging” แทน “Happy publishing” ทั้งสองแบบใช้งานได้ และกฎยังเหมือนเดิม คือเพิ่มการตั้งค่าเหนือบรรทัดนั้น
การตั้งค่าที่คนนิยมเปลี่ยน
แต่ละรายการใช้แค่หนึ่งบรรทัด ทั้งหมดมาจากเอกสาร wp-config.php และค่าเริ่มต้นมาจาก default-constants.php ของ WordPress
// Memory for the front end, then for wp-admin
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
// Keep at most 3 revisions per post (false turns revisions off)
define( 'WP_POST_REVISIONS', 3 );
// Autosave every 180 seconds
define( 'AUTOSAVE_INTERVAL', 180 );
// Empty the trash after 7 days
define( 'EMPTY_TRASH_DAYS', 7 );
// Remove the theme and plugin file editor from wp-admin
define( 'DISALLOW_FILE_EDIT', true );
// Force HTTPS for logins and wp-admin
define( 'FORCE_SSL_ADMIN', true );
// Set the site addresses here
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );
คัดลอกเฉพาะบรรทัดที่ต้องการ บางรายการมีรายละเอียดที่ควรรู้:
- หน่วยความจำ: ค่าเริ่มต้นของ WordPress คือ 40M หรือ 64M บน multisite และ 256M สำหรับ wp-admin เว้นแต่ PHP จะอนุญาตมากกว่านั้นอยู่แล้ว หากโฮสติ้งไม่อนุญาตให้เปลี่ยนขีดจำกัด WordPress จะใช้ขีดจำกัดที่ PHP มีอยู่ คู่มือหน่วยความจำไม่พอ อธิบายว่าควรทำอย่างไรเมื่อเจอกรณีนี้
- รีวิชัน: เปิดอยู่โดยค่าเริ่มต้น ตั้ง
falseเพื่อปิด หรือใส่ตัวเลขเพื่อจำกัดจำนวน - การบันทึกอัตโนมัติและถังขยะ: ค่าเริ่มต้นคือ 60 วินาทีและ 30 วัน การตั้ง
EMPTY_TRASH_DAYSเป็น0จะปิดถังขยะ และเอกสารเตือนว่า WordPress จะไม่ถามยืนยันเมื่อมีคนคลิก “Delete Permanently” (ลบถาวร) - ตัวแก้ไขไฟล์: คู่มือเสริมความปลอดภัย บอกว่าวิธีนี้ไม่ได้หยุดผู้โจมตีจากการอัปโหลดไฟล์อันตราย แม้อาจหยุดการโจมตีบางแบบได้
DISALLOW_FILE_MODSไปไกลกว่านั้น โดยบล็อกการติดตั้งและอัปเดตปลั๊กอินและธีมด้วย - HTTPS: เมื่อการตั้งค่า “ที่อยู่ WordPress” ขึ้นต้นด้วย
httpsอยู่แล้ว WordPress จะตั้งFORCE_SSL_ADMINเป็นtrueเอง บรรทัดนี้จะเปลี่ยนแปลงอะไรก็ต่อเมื่อที่อยู่ไม่ได้ขึ้นต้นด้วยhttps - ที่อยู่ไซต์: ค่าเหล่านี้ใช้แทนค่าที่บันทึกไว้โดยไม่เปลี่ยนสิ่งที่เก็บในฐานข้อมูล ต้องใส่ส่วน
https://ด้วย
มีการตั้งค่าหนึ่งที่ต้องวางแผนมากกว่า define( 'DISABLE_WP_CRON', true ); ทำให้การเข้าชมหน้าเว็บไม่เริ่มงานตามกำหนดเวลา ดังนั้นให้ตั้ง cron job บนเซิร์ฟเวอร์สำหรับ wp-cron.php ก่อนเปิดใช้ ไม่เช่นนั้นโพสต์ที่ตั้งเวลาและงานตามเวลาอื่นๆ จะไม่ทำงาน
วิธีแก้ไข wp-config.php อย่างปลอดภัย
- ดาวน์โหลดสำเนาก่อน เก็บไว้ในคอมพิวเตอร์ของคุณเอง สำเนาที่ทิ้งไว้บนเซิร์ฟเวอร์ในชื่ออย่าง
wp-config.php.bakอาจเปิดอ่านได้ในเบราว์เซอร์ เพราะเซิร์ฟเวอร์ไม่ถือว่าเป็น PHP อีกต่อไป - เปิดไฟล์ในโปรแกรมแก้ไขข้อความธรรมดา คู่มือการแก้ไขไฟล์ของ WordPress ระบุว่า Notepad++, Sublime Text และ Visual Studio Code ใช้ได้ และเตือนไม่ให้ใช้ Google Docs และ Microsoft Word เพราะโปรแกรมประมวลผลคำจะเปลี่ยนเครื่องหมายคำพูดและอาจเพิ่มโค้ดที่ทำให้ไฟล์เสีย
- หาบรรทัด “stop editing” แล้ววางบรรทัดใหม่ไว้เหนือบรรทัดนั้นทันที หากการตั้งค่านั้นถูกกำหนดไว้ด้านบนแล้ว ให้เปลี่ยนที่บรรทัดนั้น
- บันทึกและอัปโหลด แล้วเปิดไซต์ ในหน้าต่างส่วนตัวของเบราว์เซอร์ พร้อมกับหนึ่งหน้าใน wp-admin
- ถ้ามีอะไรพัง ให้นำสำเนากลับมาใช้ วิธีนี้ย้อนการแก้ไขได้แม้ wp-admin จะโหลดไม่ขึ้น
ย้ายไฟล์ไปไว้เหนือเว็บรูท
คู่มือเสริมความปลอดภัยบอกว่าเก็บ wp-config.php ไว้เหนือโฟลเดอร์ติดตั้ง WordPress หนึ่งชั้นได้ และโค้ดของตัวโหลดรองรับโดยไม่ต้องตั้งค่าเพิ่ม ย้ายไฟล์แล้วตรวจว่าไซต์ยังโหลดได้ การย้ายนี้มีข้อจำกัดสองข้อ:
- โฟลเดอร์แม่ต้องไม่มี WordPress อีกชุดติดตั้งอยู่ ตัวโหลดจะไม่สนใจโฟลเดอร์แม่ที่มี
wp-settings.phpของตัวเอง - เหนือขึ้นไปหนึ่งชั้นจะเป็นส่วนตัวก็ต่อเมื่อ WordPress อยู่ที่เว็บรูท ถ้า WordPress อยู่ในโฟลเดอร์ย่อยอย่าง
/blog/เหนือขึ้นไปหนึ่งชั้นมักยังเป็นสาธารณะ
คู่มือเดียวกันบอกว่าบางคนมองว่าการย้ายนี้ให้ประโยชน์ด้านความปลอดภัยน้อยมาก และอาจสร้างช่องโหว่ร้ายแรงหากทำโดยไม่ระวัง จึงควรถือเป็นทางเลือก บน Apache คู่มือยังให้บล็อกนี้สำหรับวางที่ด้านบนของไฟล์ .htaccess ซึ่งปฏิเสธคำขอโดยตรงที่เข้ามายังไฟล์:
<Files "wp-config.php">
Require all denied
</Files>
คู่มือความปลอดภัย .htaccess ของเราอธิบายกฎนี้พร้อมกับกฎอื่นๆ
สิทธิ์ไฟล์ของ wp-config.php
เอกสารของ WordPress ให้ตัวเลขต่างกันเล็กน้อยตามสถานการณ์:
- คู่มือเสริมความปลอดภัย บอกว่าควรมีแค่คุณและเว็บเซิร์ฟเวอร์ที่อ่านไฟล์ได้ ซึ่งคู่มือระบุว่าโดยทั่วไปหมายถึง 400 หรือ 440
- คู่มือสิทธิ์ไฟล์ ระบุ 440 หรือ 400 บนแชร์โฮสติ้งที่ใช้ suexec เพื่อกันไม่ให้ผู้ใช้อื่นบนเซิร์ฟเวอร์อ่านไฟล์ได้ และยังแสดง 600 เป็นตัวอย่างที่ปลอดภัย
- สำหรับไฟล์ WordPress ทั่วไป คู่มือนั้นระบุ 644 หรือ 640
ตัวเลขที่ใช้ได้ขึ้นอยู่กับผู้ใช้ระบบที่เว็บเซิร์ฟเวอร์ทำงานอยู่ เว็บเซิร์ฟเวอร์ต้องอ่านไฟล์ได้ ดังนั้นหากไซต์โหลดไม่ขึ้นหลังการเปลี่ยน ให้กลับไปใช้ค่าเดิม แล้วถามผู้ให้บริการโฮสติ้งว่าค่าใดเหมาะกับระบบของเขา
ข้อผิดพลาดที่พบบ่อย
- วางการตั้งค่าหลังบรรทัด
wp-settings.phpบรรทัดนั้นจะโหลด WordPress และกำหนดค่าเริ่มต้น ค่าคงที่ของ PHP เปลี่ยนไม่ได้ ระหว่างที่สคริปต์ทำงาน บรรทัดของคุณจึงไม่มีผล - กำหนดการตั้งค่าเดียวกันสองครั้ง บรรทัดแรกกำหนดค่า และบรรทัดที่สองเปลี่ยนค่านั้นไม่ได้ คู่มือ PHP ระบุว่าการประกาศค่าคงที่ซ้ำถูกเลิกแนะนำ (deprecated) ตั้งแต่ PHP 8.5 จึงอาจมีข้อความแจ้งเตือนด้วย ค้นหาชื่อในไฟล์ก่อนเพิ่ม
- ใส่เครื่องหมายคำพูดครอบ true หรือ false
'false'เป็นสตริงที่ไม่ว่าง และ PHP ถือว่าเป็น true ให้เขียนfalseโดยไม่มีเครื่องหมายคำพูด ส่วนขนาดอย่าง'256M'ต้องมี - เครื่องหมายคำพูดแบบโค้งจากโปรแกรมประมวลผลคำหรือหน้าเว็บ PHP ต้องใช้เครื่องหมายคำพูดแบบตรง แบบโค้งจึงทำให้เกิดข้อผิดพลาดที่หยุดการโหลดไซต์
- แสดงข้อผิดพลาดดีบักบนไซต์ที่ใช้งานจริง
WP_DEBUG_DISPLAYมีค่าเริ่มต้นเป็นtrueหากเปิดเฉพาะWP_DEBUGข้อผิดพลาดจะแสดงบนหน้าเว็บให้ผู้เข้าชมเห็น คู่มือตำแหน่งไฟล์บันทึกดีบัก แสดงวิธีส่งข้อผิดพลาดไปยังไฟล์ - เปิด
WP_ALLOW_REPAIRทิ้งไว้ เอกสารบอกให้เปิดเฉพาะเมื่อจำเป็น และปิดเมื่อแก้ปัญหาเสร็จแล้ว
คำถามที่พบบ่อย
wp-config.php ใน WordPress คืออะไร?
คือไฟล์การตั้งค่าที่ WordPress โหลดตอนเริ่มทำงาน ไฟล์นี้เก็บข้อมูลเข้าฐานข้อมูล คีย์ความปลอดภัย และคำนำหน้าตาราง และเป็นที่สำหรับเพิ่มการตั้งค่าอย่าง WP_DEBUG หรือ WP_MEMORY_LIMIT
ไฟล์ wp-config.php อยู่ที่ไหน?
โดยปกติอยู่ที่รูทของการติดตั้ง WordPress ซึ่งเป็นโฟลเดอร์ที่มี wp-admin, wp-includes และ wp-content อยู่ด้วย WordPress ยังยอมรับไฟล์ที่อยู่เหนือโฟลเดอร์ติดตั้งหนึ่งชั้น ตราบใดที่โฟลเดอร์นั้นไม่มี wp-settings.php
ควรเพิ่มโค้ดตรงไหนใน wp-config.php? เหนือบรรทัด That’s all, stop editing! Happy publishing ไฟล์รุ่นเก่าจะเขียนว่า Happy blogging บรรทัดสุดท้ายด้านล่างจะโหลด WordPress การตั้งค่าที่วางไว้หลังบรรทัดนั้นจึงมาช้าเกินไป
แก้ไข wp-config.php ปลอดภัยหรือไม่? ปลอดภัย หากคุณมีไฟล์สำรองและใช้โปรแกรมแก้ไขข้อความธรรมดา การพิมพ์ผิดเพียงจุดเดียวอาจทำให้ทั้งไซต์โหลดไม่ขึ้น รวมถึง wp-admin ด้วย จึงควรดาวน์โหลดสำเนาไว้ก่อน หากไซต์พังหลังแก้ไข ให้นำสำเนากลับมาใช้
ถ้าลบ wp-config.php จะเกิดอะไรขึ้น? WordPress จะหาข้อมูลเข้าฐานข้อมูลไม่เจอ และเริ่มขั้นตอนการติดตั้งพร้อมแจ้งให้สร้างไฟล์การตั้งค่า เนื้อหาของคุณยังอยู่ในฐานข้อมูล การกู้คืนไฟล์สำรองหรือสร้างไฟล์ใหม่ด้วยข้อมูลเดิมจึงเชื่อมต่อไซต์กลับมาได้
wp-config.php ควรมีสิทธิ์ไฟล์เท่าไร? คู่มือเสริมความปลอดภัยของ WordPress บอกว่าควรมีแค่คุณและเว็บเซิร์ฟเวอร์ที่อ่านไฟล์ได้ ซึ่งโดยทั่วไปหมายถึง 400 หรือ 440 คู่มือสิทธิ์ไฟล์ยังแสดง 600 ด้วย เว็บเซิร์ฟเวอร์ยังต้องอ่านไฟล์ได้ ดังนั้นหากไซต์โหลดไม่ขึ้น ให้สอบถามผู้ให้บริการโฮสติ้ง
แหล่งข้อมูล
- WordPress Advanced Administration: wp-config.php, Hardening WordPress, File permissions, Editing files
- ซอร์สโค้ดของ WordPress: wp-config-sample.php, wp-load.php, default-constants.php, setup-config.php, cron.php
- คู่มือ PHP: Constants, Booleans
สร้างการตั้งค่าที่คุณต้องการโดยไม่ต้องพิมพ์เอง พร้อมคีย์ความปลอดภัยชุดใหม่ ด้วยเครื่องมือสร้าง wp-config.php ฟรี
FAQ
คำถาม
wp-config.php ใน WordPress คืออะไร?
คือไฟล์การตั้งค่าที่ WordPress โหลดตอนเริ่มทำงาน ไฟล์นี้เก็บข้อมูลเข้าฐานข้อมูล คีย์ความปลอดภัย และคำนำหน้าตาราง และเป็นที่สำหรับเพิ่มการตั้งค่าอย่าง WP_DEBUG หรือ WP_MEMORY_LIMIT
ไฟล์ wp-config.php อยู่ที่ไหน?
โดยปกติอยู่ที่รูทของการติดตั้ง WordPress ซึ่งเป็นโฟลเดอร์ที่มี wp-admin, wp-includes และ wp-content อยู่ด้วย WordPress ยังยอมรับไฟล์ที่อยู่เหนือโฟลเดอร์ติดตั้งหนึ่งชั้น ตราบใดที่โฟลเดอร์นั้นไม่มี wp-settings.php
ควรเพิ่มโค้ดตรงไหนใน wp-config.php?
เหนือบรรทัด That's all, stop editing! Happy publishing ไฟล์รุ่นเก่าจะเขียนว่า Happy blogging บรรทัดสุดท้ายด้านล่างจะโหลด WordPress การตั้งค่าที่วางไว้หลังบรรทัดนั้นจึงมาช้าเกินไป
แก้ไข wp-config.php ปลอดภัยหรือไม่?
ปลอดภัย หากคุณมีไฟล์สำรองและใช้โปรแกรมแก้ไขข้อความธรรมดา การพิมพ์ผิดเพียงจุดเดียวอาจทำให้ทั้งไซต์โหลดไม่ขึ้น รวมถึง wp-admin ด้วย จึงควรดาวน์โหลดสำเนาไว้ก่อน หากไซต์พังหลังแก้ไข ให้นำสำเนากลับมาใช้
ถ้าลบ wp-config.php จะเกิดอะไรขึ้น?
WordPress จะหาข้อมูลเข้าฐานข้อมูลไม่เจอ และเริ่มขั้นตอนการติดตั้งพร้อมแจ้งให้สร้างไฟล์การตั้งค่า เนื้อหาของคุณยังอยู่ในฐานข้อมูล การกู้คืนไฟล์สำรองหรือสร้างไฟล์ใหม่ด้วยข้อมูลเดิมจึงเชื่อมต่อไซต์กลับมาได้
wp-config.php ควรมีสิทธิ์ไฟล์เท่าไร?
คู่มือเสริมความปลอดภัยของ WordPress บอกว่าควรมีแค่คุณและเว็บเซิร์ฟเวอร์ที่อ่านไฟล์ได้ ซึ่งโดยทั่วไปหมายถึง 400 หรือ 440 คู่มือสิทธิ์ไฟล์ยังแสดง 600 ด้วย เว็บเซิร์ฟเวอร์ยังต้องอ่านไฟล์ได้ ดังนั้นหากไซต์โหลดไม่ขึ้น ให้สอบถามผู้ให้บริการโฮสติ้ง