คู่มือการตั้งค่า PHP บน ServBay: ปรับแต่ง php.ini, PHP-FPM และโมดูลส่วนขยาย
ServBay มอบสภาพแวดล้อมพัฒนา PHP บนเครื่องที่ทรงพลังและยืดหยุ่นสำหรับนักพัฒนาเว็บ เพื่อตอบสนองความต้องการของแต่ละโครงการ คุณอาจต้องปรับแต่งค่าต่างๆ ของ PHP เช่น ขีดจำกัดหน่วยความจำ, ขนาดการอัปโหลดไฟล์, ระดับการรายงานข้อผิดพลาด หรือเปิดใช้งานส่วนขยายเฉพาะ
บทความนี้จะแนะนำอย่างละเอียดเกี่ยวกับวิธีการแก้ไขค่า PHP ใน ServBay โดย ServBay ได้ออกแบบอินเทอร์เฟซแบบกราฟิก (UI) ที่สะดวกและปลอดภัยสำหรับการจัดการค่าต่างๆ เหล่านี้ แม้ว่าการรู้ตำแหน่งและโครงสร้างของไฟล์คอนฟิกพื้นฐาน (เช่น php.ini
และ php-fpm.conf
) จะมีประโยชน์ แต่แนะนำอย่างยิ่งให้ใช้ UI ของ ServBay ในการแก้ไข เพื่อลดปัญหาด้านความเข้ากันได้และรับรองว่าค่าการตั้งค่ายังคงอยู่เสมอ
คำเตือนสำคัญ
ห้ามแก้ไขไฟล์คอนฟิก PHP ที่สร้างโดย ServBay (ซึ่งอยู่ใน /Applications/ServBay/etc/php/<version>/
และโฟลเดอร์ย่อย) ด้วยตนเอง ไฟล์เหล่านี้ถูกจัดการโดย ServBay การปรับแต่งด้วยมือตรงนี้จะถูกเขียนทับเมื่อมีการอัปเดตหรือรีสตาร์ท ServBay หรือกระทำการที่เกี่ยวข้องอื่นๆ การเปลี่ยนแปลงทั้งหมดควรดำเนินการผ่านอินเทอร์เฟซผู้ใช้ของ ServBay เท่านั้น
ภาพรวม
ภายใน ServBay ไฟล์คอนฟิกของ PHP แต่ละเวอร์ชันจะถูกเก็บในโฟลเดอร์ของตัวเอง ตัวอย่างเช่น คอนฟิกหลักของ PHP 8.3 อยู่ที่ /Applications/ServBay/etc/php/8.3
ไฟล์คอนฟิกหลักของ PHP ได้แก่:
php.ini
: ไฟล์คอนฟิกหลักของ PHP ที่ส่งผลต่อทั้ง CLI และเว็บเซิร์ฟเวอร์php-fpm.conf
: ไฟล์คอนฟิกของ PHP-FPM (FastCGI Process Manager) ซึ่งมีผลต่อวิธีการที่ PHP ทำงานร่วมกับเว็บเซิร์ฟเวอร์ (เช่น Caddy หรือ Nginx) และประสิทธิภาพconf.d/
: โฟลเดอร์นี้มีไฟล์ตั้งค่าการโหลดของส่วนขยาย PHP (.ini
) ต่างๆ เช่นxdebug.ini
,opcache.ini
เป็นต้น
แม้ไฟล์เหล่านี้จะมีอยู่จริง แต่ ServBay มีวิธีที่ทั้งปลอดภัยและง่ายกว่าในการแก้ไขค่าเหล่านี้
การตั้งค่าผ่านอินเทอร์เฟซผู้ใช้ของ ServBay (แนะนำ)
ServBay มี UI ที่ใช้งานง่าย ให้คุณสามารถแก้ไขค่าต่างๆ ของ PHP ได้โดยตรง เมื่อบันทึกการเปลี่ยนแปลงผ่าน UI ระบบจะนำไปใช้โดยอัตโนมัติ และจะรีสตาร์ทบริการ PHP ให้อัตโนมัติหากจำเป็น โดยที่คุณไม่ต้องแก้ไขไฟล์หรือสั่งคำสั่งผ่านเทอร์มินัลเอง
ขั้นตอนในการเข้าถึงหน้าการตั้งค่า PHP:
- เปิดหน้าต่างหลักของ ServBay
- คลิกที่ ภาษา ในแถบนำทางด้านซ้าย
- จากรายชื่อภาษา ให้เลือกเวอร์ชัน PHP ที่ต้องการตั้งค่า (เช่น
PHP 8.3
) - แผงด้านขวาจะโชว์รายละเอียดและตัวเลือกการตั้งค่าของ PHP เวอร์ชันนั้น
ตัวอย่างหน้าตั้งค่าของ PHP มีลักษณะดังนี้:
โดยทั่วไป หน้าจะแบ่งเป็น 3 ส่วนหลัก ได้แก่ การตั้งค่า PHP-FPM, PHP (php.ini
), และส่วนขยาย PHP ซึ่งจะอธิบายต่อไป
การตั้งค่า PHP FPM
หมายเหตุ
การตั้งค่าใน php-fpm.conf
มีผลโดยตรงต่อ PHP เมื่อทำงานในเว็บเซิร์ฟเวอร์เท่านั้น การปรับค่าทาง UI ในส่วนนี้จะถูกใช้แทน (หรือครอบคลุม) ค่าที่ตั้งใน php.ini
เฉพาะสำหรับการประมวลผลผ่านเว็บเท่านั้น การตั้งค่านี้ไม่มีผลกับการรัน PHP ผ่านคอมมานด์ไลน์
บริการเว็บใน ServBay (เช่น Caddy, Nginx) สื่อสารกับ PHP ผ่าน PHP-FPM หน้าตั้งค่า PHP-FPM ใน UI ให้คุณปรับค่าต่างๆ ที่ส่งผลต่อประสิทธิภาพและความเสถียรของ PHP ในสภาพแวดล้อมเว็บ เช่น
- การจัดการโพรเซส (
pm
): กำหนดวิธีสร้างและจัดการโพรเซสของ PHP-FPM (dynamic
,static
) - จำนวนโพรเซส (
pm.max_children
,pm.start_servers
, ฯลฯ): กำหนดจำนวนโพรเซสสูงสุด, จำนวนโพรเซสตอนเริ่มต้น ฯลฯ ซึ่งมีผลต่อความสามารถในการรองรับงานพร้อมกัน - ขีดจำกัดหน่วยความจำ (
memory_limit
): ค่าจากตรงนี้จะ override ที่ตั้งไว้ในphp.ini
(เฉพาะสำหรับเว็บ) - การตั้งค่าบันทึกและแสดงข้อผิดพลาด: ตั้งค่าพาธไฟล์บันทึกข้อผิดพลาด, ระดับและวิธีแสดงบนหน้าเว็บ
ตัวอย่างเช่น หากคุณต้องการเพิ่มขีดจำกัดหน่วยความจำของ PHP บนเว็บจาก 64M หรือ 128M ให้เป็น 1G เพียงเลือกค่า memory_limit
เป็น 1G
ใน UI ส่วน PHP FPM แล้วกดบันทึก การเปลี่ยนแปลงนี้มีผลกับสคริปต์ PHP ที่เข้าผ่านเว็บเท่านั้น ถ้ารันผ่านคอมมานด์ไลน์ยังคงได้รับค่าตาม php.ini
ตัวอย่างสถานการณ์: หากใน php.ini
มี memory_limit = 512M
แต่ใน PHP FPM กำหนดเป็น 128M
จะเป็นดังนี้:
- รัน PHP จาก CLI จะได้ขีดจำกัดที่
512M
- เรียก PHP ผ่านเว็บได้ขีดจำกัดเพียง
128M
การตั้งค่า php.ini
หมายเหตุ
ค่าที่ตั้งใน php.ini
มีผลครอบคลุมทั้ง CLI และเว็บ อย่างไรก็ตาม ค่าเดียวกันที่ถูกตั้งไว้ใน PHP FPM จะถูกใช้แทนที่ ในส่วนของเว็บ
ส่วนตั้งค่านี้จะตรงกับค่าหลักต่างๆในไฟล์ php.ini
ประกอบด้วย:
post_max_size
: ข้อมูลสูงสุดที่รับได้จากการ POSTupload_max_filesize
: ไฟล์ที่อนุญาตให้อัปโหลดมีขนาดได้สูงสุดเท่าไรdate.timezone
: ตั้งค่าไทม์โซนเริ่มต้นของ PHPdisplay_errors
/error_reporting
: จัดการการแสดงผลข้อผิดพลาดและระดับการรายงานmax_execution_time
: จำกัดเวลาในการรันสคริปต์ (วินาที)disable_functions
/disable_classes
: ปิดฟังก์ชันหรือคลาส PHP บางตัวเพื่อความปลอดภัยopen_basedir
: จำกัดการเข้าถึงไฟล์ของ PHP ขอแนะนำให้จัดเก็บเว็บไซต์ไว้ในโฟลเดอร์เริ่มต้น/Applications/ServBay/www
ของ ServBay เพื่อสะดวกในการกำหนดopen_basedir
เพียงเส้นทางเดียว
คุณสามารถเปลี่ยนค่าสำคัญเหล่านี้ได้ง่ายๆ ผ่าน UI ของ ServBay
รายละเอียดเพิ่มเติมเกี่ยวกับฟิลด์ config ทั้งหมดใน php.ini
โปรดอ้างอิงจากเอกสารทางการของ PHP: PHP Runtime Configuration
การตั้งค่าส่วนขยาย PHP
ServBay มาพร้อมกับส่วนขยาย PHP ยอดนิยมให้เลือกใช้ครอบคลุมหลายด้าน เช่น การเชื่อมต่อฐานข้อมูล, แคชชิ่ง, ดีบั๊ก, สนับสนุนเฟรมเวิร์กต่างๆ เป็นต้น โดย UI จะช่วยให้คุณเปิด-ปิดการใช้งานส่วนขยายเหล่านี้หรือปรับแต่งพารามิเตอร์ได้แบบสะดวก
ตัวอย่างส่วนขยายยอดนิยมที่รองรับใน ServBay ได้แก่ xDebug
, OPcache
, ImageMagick
, Redis
, MongoDB
, Phalcon
, Swoole
และอื่นๆ รวมถึงรองรับส่วนขยายสำหรับฐานข้อมูลหลายชนิด, Messaging, ระบบแคช ฯลฯ
วิธีเปิดหรือปิดส่วนขยายทำได้ดังนี้:
- ในหน้า Config PHP ของ UI ให้ไปที่แท็บส่วนขยายหรือ External Modules
- หาโมดูลที่คุณต้องการเปิด/ปิด (เช่น
xdebug
) - คลิกสวิตช์เพื่อเปลี่ยนสถานะเปิด/ปิด
- ถ้าส่วนขยายมีค่าตั้งเพิ่มเติม (เช่น
xDebug
มีxdebug.mode
,xdebug.client_port
ฯลฯ) สามารถตั้งค่าได้เลยในหน้านั้น - กดบันทึกเพื่อใช้การตั้งค่า
สำหรับรายชื่อทั้งหมดและข้อมูลเพิ่มเติมเกี่ยวกับส่วนขยายที่รองรับ กรุณาอ่านคู่มือ รายการส่วนขยาย PHP ที่รองรับ ในเอกสารของ ServBay (โปรดเช็คเอกสารฉบับล่าสุด)
เข้าใจโครงสร้างไฟล์คอนฟิก PHP (ไม่แนะนำให้แก้ไขโดยตรง)
แม้จะแนะนำให้เปลี่ยนค่าผ่าน UI ของ ServBay แต่การเข้าใจตำแหน่งและโครงสร้างของไฟล์คอนฟิกระดับล่างช่วยให้เข้าใจกลไกการทำงานของ PHP มากขึ้น
ไฟล์คอนฟิก PHP ที่สร้างโดย ServBay จะอยู่ที่ /Applications/ServBay/etc/php/<version>/
php.ini
: ไฟล์คอนฟิกหลักphp-fpm.conf
: ไฟล์คอนฟิก PHP-FPMconf.d/
: โฟลเดอร์สำหรับไฟล์.ini
ของแต่ละโมดูล/ส่วนขยาย
ตัวอย่างโครงสร้างไฟล์ php.ini
php.ini
มีรูปแบบเป็นไฟล์ INI ตัวอย่างการตั้งค่าที่พบบ่อย:
ini
; เปลี่ยนขีดจำกัดหน่วยความจำ
memory_limit = 256M
; เปลี่ยนขนาดสูงสุดของไฟล์อัปโหลด
upload_max_filesize = 50M
post_max_size = 50M
; เปลี่ยนโซนเวลา
date.timezone = "Asia/Shanghai" ; หรือ "UTC", "America/New_York" ปรับตามต้องการ
; เปิดแสดงข้อผิดพลาด (ใช้เฉพาะการพัฒนา!)
display_errors = On
error_reporting = E_ALL
; กำหนดเวลา Execute สูงสุด
max_execution_time = 300
; จำกัดเส้นทางการเข้าถึงไฟล์ระบบ (ตัวอย่าง)
; open_basedir = /Applications/ServBay/www/:/tmp/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ตัวอย่างโครงสร้างไฟล์ php-fpm.conf
php-fpm.conf
มีทั้งค่าระดับ global และ pool (กลุ่มโพรเซส) โดย ServBay มาตรฐานจะตั้ง default pool เป็น www
ini
[global]
; ที่อยู่ log ข้อผิดพลาดระดับ global
error_log = /Applications/ServBay/logs/php/8.3/errors.log
[www]
; จุดที่รัน process, port หรือ socket
listen = /Applications/ServBay/tmp/php-cgi-8.3.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
; user/group (ServBay รันใต้บัญชีผู้ใช้ปัจจุบัน)
; user = servbay-demo
; group = staff
; โหมดจัดการโพรเซส (static, dynamic, ondemand)
pm = dynamic
pm.max_children = 10 ; จำนวนสูงสุดของ child process
pm.start_servers = 2 ; จำนวนที่เริ่มต้นขึ้นในตอนแรก
pm.min_spare_servers = 1 ; จำนวน child process ว่างอย่างต่ำ
pm.max_spare_servers = 6 ; จำนวน child process ว่างอย่างมาก
pm.max_requests = 1024 ; จำนวน request ต่อ child ก่อนรีสตาร์ทกัน memory leak
; เปิด slow log (บันทึก request ช้ากว่า request_slowlog_timeout)
request_slowlog_timeout = 5s
slowlog = /Applications/ServBay/logs/php/8.3/slow.log
; php setting ที่ override ของ php.ini (ตัวอย่าง)
; php_admin_value[memory_limit] = 128M
; php_admin_flag[display_errors] = on
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
ตัวอย่างไฟล์โหลดโมดูล PHP (conf.d/)
ไฟล์ .ini
ใน conf.d/
ใช้สำหรับโหลดและตั้งค่าส่วนขยาย ตัวอย่างเช่น xdebug.ini
อาจเป็นแบบนี้:
ini
[Xdebug]
; โหลด Xdebug extension
zend_extension = xdebug.so
; Xdebug modes (debug, develop, profile, trace, coverage)
xdebug.mode=debug,develop
; วิธี start debug (yes, trigger, develop)
; yes: เปิด debug ทุกครั้ง
; trigger: เปิดเมื่อมี trigger เช่น GET/POST หรือ cookie
; develop: เปิดเฉพาะ developer aid เช่น stack trace
xdebug.start_with_request=yes
; host และ port สำหรับเชื่อม IDE
xdebug.client_host=localhost
xdebug.client_port=39083
; Xdebug log file
xdebug.log=/Applications/ServBay/logs/xdebug/8.3/xdebug.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ย้ำอีกครั้ง: แม้จะพบไฟล์เหล่านี้ในโฟลเดอร์ดังกล่าว แต่ห้ามแก้ไขโดยตรง ให้ใช้ UI ของ ServBay เป็นหลัก
การนำการเปลี่ยนแปลงไปใช้: การรีสตาร์ทบริการ PHP
เมื่อทำการเปลี่ยนแปลง config ผ่าน UI แล้ว ServBay จะพยายามตรวจจับและนำการตั้งค่าใหม่ไปใช้ให้อัตโนมัติ บางกรณีอาจจำเป็นต้องรีสตาร์ท PHP เวอร์ชันที่เกี่ยวข้องเพื่อให้แน่ใจว่าการตั้งค่าทั้งหมดเริ่มใช้งาน
รีสตาร์ทจากอินเทอร์เฟซ ServBay
- เปิดหน้าต่างหลักของ ServBay
- คลิกที่ ซอฟต์แวร์ ในแถบนำทางซ้าย
- หา PHP เวอร์ชันที่คุณเพิ่งปรับตั้งค่า
- คลิกไอคอนหมุน (รีเฟรช) ตรง PHP เวอร์ชันนั้นเพื่อรีสตาร์ท
รีสตาร์ทผ่านคำสั่ง servbayctl
สำหรับนักพัฒนาที่คุ้นเคยกับ command line สามารถใช้คำสั่ง servbayctl
ของ ServBay เพื่อจัดการบริการรวมถึงรีสตาร์ท PHP เวอร์ชันต่างๆ
เปิดเทอร์มินัลและรันคำสั่งนี้ (เปลี่ยน 8.3
เป็นเวอร์ชันที่ต้องการรีสตาร์ท):
bash
servbayctl restart php 8.3
1
คำสั่งนี้จะรีสตาร์ท PHP-FPM เวอร์ชันที่ระบุและนำคอนฟิกใหม่ทั้งหมดไปใช้งาน
คำถามที่พบบ่อย (FAQ)
Q: ถ้าแก้ไขไฟล์
php.ini
เอง ทำไมค่าถึงไม่อัปเดตหรือถูกรีเซต?- A: ServBay จะดูแลไฟล์คอนฟิกทั้งหมดเอง ทุกการเปลี่ยนแปลงด้วยมืออาจถูกเขียนทับเมื่ออัปเดต รีสตาร์ท หรือกระทำการอื่นๆ ที่เกี่ยวข้อง ดังนั้นควรใช้ UI ของ ServBay เท่านั้นเพื่อความต่อเนื่องและปลอดภัย
Q: ถ้าต้องการเพิ่มหน่วยความจำ PHP หรือขนาดอัปโหลดไฟล์ ต้องทำอย่างไร?
- A: ไปที่ UI ของ ServBay เมนู ภาษา แล้วเลือก PHP เวอร์ชันที่ต้องการ ปรับ
memory_limit
ใน PHP FPM หน้าตั้งค่าหลัก และปรับupload_max_filesize
,post_max_size
ในหน้า php.ini จากนั้นบันทึกและรีสตาร์ท PHP
- A: ไปที่ UI ของ ServBay เมนู ภาษา แล้วเลือก PHP เวอร์ชันที่ต้องการ ปรับ
Q: จะเปิดหรือปรับแต่ง Xdebug อย่างไร?
- A: ไปที่ UI ของ ServBay เมนู ภาษา จากนั้นเลือก PHP เวอร์ชันที่ต้องการ เปิด Xdebug ในแท็บส่วนขยายและปรับค่าต่างๆ เช่น
xdebug.mode
,xdebug.client_host
,xdebug.client_port
แล้วบันทึกและรีสตาร์ท PHP
- A: ไปที่ UI ของ ServBay เมนู ภาษา จากนั้นเลือก PHP เวอร์ชันที่ต้องการ เปิด Xdebug ในแท็บส่วนขยายและปรับค่าต่างๆ เช่น
Q: ความแตกต่างระหว่าง
php.ini
กับ PHP-FPM config? ควรเปลี่ยนตรงไหน?- A:
php.ini
กำหนดค่า PHP แบบรวม (ทั้ง CLI และเว็บ) ส่วน PHP-FPM (php-fpm.conf
) มีผลเฉพาะกับ PHP ที่รันโดยเว็บเซิร์ฟเวอร์ และค่าที่ชื่อเดียวกันใน FPM จะ override ค่าจากphp.ini
เฉพาะเว็บเซิร์ฟเวอร์เท่านั้น ถ้าต้องการปรับค่าที่กระทบเว็บ เช่น memory limit, max execution time หรือ error display ให้ปรับที่ PHP-FPM ก่อน แต่ถ้าเกี่ยวกับ CLI หรือค่ากลาง ให้เลือกที่php.ini
UI ของ ServBay แยกกลุ่มนี้ไว้อย่างชัดเจน
- A:
สรุป
ServBay มอบวิธีที่ปลอดภัยและสะดวกในการจัดการค่าตั้ง PHP ทุกส่วน ไม่ว่าจะเป็น php.ini
, PHP-FPM หรือโมดูลส่วนขยายผ่าน UI ดังนั้นการปรับแต่งผ่านอินเทอร์เฟซ, บันทึก และรีสตาร์ทบริการ PHP จะช่วยให้มั่นใจว่าการตั้งค่าสภาพแวดล้อมตรงกับที่คุณต้องการ แม้จะเข้าใจที่อยู่และโครงสร้างไฟล์ config ระดับล่างได้ แต่ควรเปลี่ยนค่าจริงผ่าน UI เสมอเพื่อป้องกันการเขียนทับ การใช้ความสามารถของ ServBay นี้จะช่วยให้คุณปรับแต่งสภาพแวดล้อม PHP สำหรับแต่ละโปรเจ็กต์ได้อย่างง่ายดายและมั่นใจ