คอมไพล์และติดตั้งโมดูล PHP แบบกำหนดเองใน ServBay (macOS)
ServBay คือสภาพแวดล้อมสำหรับพัฒนาเว็บบน macOS ที่ทรงพลัง ออกแบบมาเพื่อตอบโจทย์นักพัฒนาเว็บยุคใหม่อย่างครบถ้วน ภายในมีซอฟต์แวร์และแพ็กเกจหลากหลายชนิด อาทิ PHP, Node.js, Python, Go, Java, ระบบฐานข้อมูล (เช่น MySQL, PostgreSQL, MongoDB), แคช (Redis) และเว็บเซิร์ฟเวอร์ (Caddy, Nginx, Apache) ServBay รองรับหลายเวอร์ชันของแต่ละแพ็กเกจ ช่วยให้คุณสลับสภาพแวดล้อมได้อย่างยืดหยุ่นตามความต้องการของแต่ละโปรเจกต์
แม้ ServBay จะมีโมดูล PHP ที่ใช้บ่อยมาด้วยแล้ว แต่ในบางสถานการณ์ คุณอาจจำเป็นต้องคอมไพล์และติดตั้งโมดูล PHP เพิ่มเติมเพื่อขยายความสามารถ หรือเชื่อมต่อกับบริการภายนอกเฉพาะทาง
บทความนี้เป็นคู่มือแบบทีละขั้นตอน ที่จะช่วยแนะนำวิธีคอมไพล์และติดตั้งโมดูล PHP เพิ่มเติมในสภาพแวดล้อมของ ServBay ตัวอย่างจะอธิบายวิธีติดตั้งโมดูล imagick
สำหรับจัดการรูปภาพ และ sqlsrv
สำหรับเชื่อมต่อ Microsoft SQL Server เพื่อให้คุณเพิ่มขีดความสามารถ PHP บน ServBay ได้ตามต้องการ
เงื่อนไขเบื้องต้น
ข้อควรระวังสำคัญ
ก่อนคอมไพล์โมดูล PHP ใด ๆ ขั้นตอนที่สำคัญที่สุด คือการตั้งค่าสภาพแวดล้อมสำหรับคอมไพล์ (Build Environment) ตามคู่มือของ ServBay และตั้งค่าตัวแปรสภาพแวดล้อมของระบบอย่างถูกต้อง นี่คือพื้นฐานที่ขาดไม่ได้ หากข้ามหรือทำผิดขั้นตอนนี้ จะมีโอกาสสูงมากที่การคอมไพล์จะล้มเหลว เช่น เกิดข้อผิดพลาดไม่พบคำสั่ง ไลบรารี หรือไฟล์ header
สคริปต์สำหรับตั้งค่าการคอมไพล์ของ ServBay จะช่วยตั้งค่าตัวแปรแวดล้อมสำคัญ เช่น PATH
(ชี้ไปที่เครื่องมือ build ภายในของ ServBay), SERVBAY_PACKAGE_FULL_PATH
(ชี้ไปยัง root ของแพ็กเกจ ServBay) และ CPU_NUMBER
(ใช้สำหรับระบุจำนวน core ในการคอมไพล์แบบขนาน) ตัวแปรเหล่านี้จำเป็นอย่างยิ่งสำหรับคำสั่งคอมไพล์ต่อๆ ไป
กรุณาศึกษาและทำความเข้าใจขั้นตอนการตั้งค่าสภาพแวดล้อมคอมไพล์ของ ServBay จากเอกสาร การคอมไพล์ซอฟต์แวร์ด้วย ServBay และตั้งค่าทุกส่วนให้สมบูรณ์ก่อนดำเนินการคอมไพล์โมดูล
โปรดตรวจสอบให้แน่ใจว่าคุณตั้งค่าสภาพแวดล้อมสำหรับคอมไพล์และตัวแปรแวดล้อมของ ServBay ครบถ้วนถูกต้องในเทอร์มินัลที่ใช้งาน
ทำไมต้องระบุเวอร์ชัน PHP
หนึ่งในจุดเด่นของ ServBay คือสามารถติดตั้งและรัน PHP หลายเวอร์ชันในระบบเดียว เหมาะกับโปรเจกต์ที่ต้องการสลับเวอร์ชันอย่างรวดเร็ว แต่เมื่อต้องคอมไพล์โมดูล PHP ซึ่งเกี่ยวข้องกับไฟล์และ dependency เฉพาะ คุณต้องดำเนินการกับ เวอร์ชัน PHP ที่ต้องการโดยตรง เสมอ เครื่องมือสำคัญอย่าง phpize
และ php-config
จะผูกติดกับแต่ละเวอร์ชันอย่างแน่นหนา
phpize
: สคริปต์สำหรับเตรียมสภาพแวดล้อมคอมไพล์ PHP extension จะอ่านไฟล์config.m4
และสร้างconfigure
สคริปต์ (ขั้นตอนแรกของการคอมไพล์ C/C++)php-config
: สคริปต์รวบรวมข้อมูลคอนฟิกเวอร์ชัน PHP ที่เลือก ใช้บอกตำแหน่ง Path, Flags, Directory ต่าง ๆ ให้configure
เพื่อให้คอมไพล์ extension ได้ถูกต้อง
เวลาสั่งใช้คำสั่ง phpize
, php-config
หรือที่เกี่ยวข้อง ต้อง ระบุ path แบบเต็ม เพื่อชี้ไปยัง PHP เวอร์ชันที่จะคอมไพล์โมดูลให้ เช่น ถ้าจะคอมไพล์ให้ PHP 8.3 (ใน ServBay) ต้องใช้ /Applications/ServBay/package/php/8.3/current/bin/phpize
และ /Applications/ServBay/package/php/8.3/current/bin/php-config
เสมอ วิธีนี้ช่วยให้มั่นใจว่าโมดูลที่ได้จะเข้ากันกับ PHP ที่กำหนดโดยไม่เกิดปัญหา symbol missing หรือ incompatibility
ตัวอย่างในบทความนี้ใช้ PHP 8.3 ของ ServBay โปรดเปลี่ยน path ในตัวอย่างทั้งหมดให้ตรงกับเวอร์ชัน PHP ที่คุณต้องการจริง
คอมไพล์โมดูล PHP imagick
imagick
คือ PHP extension ยอดนิยมสำหรับงานจัดการรูปภาพ โดยมี ImageMagick command-line library เป็นแกนกลาง ช่วยให้ PHP ทำงานกับภาพ เช่น resize, crop, convert format, ใส่ลายน้ำ, compose แบบซับซ้อน ฯลฯ คู่มือนี้จะพาไปครบทุกขั้นตอนสำหรับการคอมไพล์และติดตั้ง imagick
บนเวอร์ชัน PHP และ ServBay ที่ต้องการ
ขั้นตอนที่ 1: ติดตั้งไลบรารี ImageMagick
imagick
จำเป็นต้องใช้ ImageMagick library (และไฟล์ header) ที่ติดตั้งบนระบบ ก่อนอื่น แนะนำให้ใช้ Homebrew เป็นตัวช่วยจัดการ
หากยังไม่มี Homebrew โปรดดูวิธีติดตั้งที่ เว็บไซต์ Homebrew
สำหรับติดตั้ง ImageMagick เปิดเทอร์มินัลและรันคำสั่งนี้:
bash
brew install imagemagick
1
ขั้นตอนที่ 2: ดาวน์โหลดซอร์สโค้ด imagick
เข้าไปที่ PECL imagick เลือกเวอร์ชันของ imagick
ที่ต้องการ (โดยมากเลือกเวอร์ชันเสถียรล่าสุด) และคัดลอกลิงก์สำหรับดาวน์โหลด ตัวอย่างใช้เวอร์ชัน 3.7.0
(เปลี่ยนตามต้องการ):
bash
wget https://pecl.php.net/get/imagick-3.7.0.tgz
1
ขั้นตอนที่ 3: แตกไฟล์ซอร์สและเข้าสู่โฟลเดอร์
เมื่อดาวน์โหลดไฟล์แล้ว ใช้ tar
แตกไฟล์ และ cd เข้าไป:
bash
tar zxvf imagick-3.7.0.tgz
cd imagick-3.7.0
1
2
2
ขั้นตอนที่ 4: เตรียมสภาพแวดล้อมคอมไพล์ (phpize)
ภายในโฟลเดอร์ซอร์ส รัน phpize
ของ PHP เวอร์ชันที่ต้องการ (path เต็ม) สมมุติจะคอมไพล์ให้ PHP 8.3 และตั้งค่าตัวแปร SERVBAY_PACKAGE_FULL_PATH
ไว้แล้ว:
bash
${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/phpize
1
หากสำเร็จ เทอร์มินัลจะแจ้งสถานะว่าพร้อมคอมไพล์แล้ว
ขั้นตอนที่ 5: กำหนดตัวเลือกคอมไพล์
ใช้ configure
ที่สร้างขึ้น เพื่อกำหนด options ในการคอมไพล์ extension อย่าลืมระบุ --with-php-config
พร้อม path เต็มของ php-config
สำหรับ PHP เวอร์ชันที่เลือก
bash
./configure --with-php-config=${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/php-config
1
configure
จะตรวจสอบไลบรารีที่ต้องใช้ ออกแบบ Makefile สำหรับ build หากเจอ error ให้เช็คเรื่อง dependency หรือ path ซ้ำอีกครั้ง
ขั้นตอนที่ 6: คอมไพล์และติดตั้งโมดูล
เมื่อได้ Makefile มาแล้ว สั่ง build ด้วย make
และติดตั้งด้วย make install
หากมีตัวแปร ${CPU_NUMBER}
(ระบุใน script ของ ServBay) ใช้เพื่อเร่งความเร็วของ make:
bash
make -j ${CPU_NUMBER}
make install
1
2
2
make install
จะคัดลอกไฟล์ imagick.so
ไปไว้ที่โฟลเดอร์ PHP extension ของเวอร์ชันนั้น ๆ (ตัวอย่างเช่น /Applications/ServBay/package/php/8.3/current/lib/php/extensions/no-debug-non-zts-YYYYMMDD/
)
ขั้นตอนที่ 7: เปิดใช้งานโมดูลใน ServBay
หลังติดตั้งไฟล์แล้ว ต้องเปิดใช้งานใน config ของ PHP เวอร์ชันนั้น ServBay ทำผ่าน GUI ได้โดยง่าย
- เปิดโปรแกรม ServBay
- เมนูซ้ายไปที่
ภาษา
-PHP
-PHP 8.3
- ทางขวาเลือกแท็บ
PHP
เลื่อนลงถึง “พารามิเตอร์เพิ่มเติม” ใส่extension=imagick.so
- กด
บันทึก
ระบบจะรีสตาร์ท PHP ให้โดยอัตโนมัติ
ขั้นตอนที่ 8: ตรวจสอบว่าโมดูลโหลดสำเร็จ
เปิดใช้โมดูลเสร็จ ต้องรีสตาร์ท PHP package ใน ServBay โดยใช้หน้าจอควบคุม หรือใช้คำสั่ง CLI ของ ServBay (ดูเพิ่มในคู่มือ)
หลังรีสตาร์ท ใช้คำสั่งนี้ตรวจสอบว่าโมดูล imagick ถูกโหลดสำเร็จ:
bash
${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/php -m | grep imagick
1
สังเกตว่าเรียก PHP ด้วย path แบบเต็ม (จาก ServBay) สำหรับแสดงโมดูลทั้งหมด หากสำเร็จ จะเห็นชื่อ imagick ปรากฏในเอาต์พุต
ถ้าอยากดูรายละเอียด ให้สร้างไฟล์ info.php
(ใส่ <?php phpinfo(); ?>
) ในโฟลเดอร์ web root (/Applications/ServBay/www
ตามดีฟอลต์) จากนั้นเปิดเบราว์เซอร์ไปที่ http://localhost/info.php
หรือโดเมนที่ตั้งไว้ ค้นหาคำว่า "imagick" เพื่อดูข้อมูลในหน้า phpinfo()
คอมไพล์ PHP โมดูล sqlsrv/pdo_sqlsrv
sqlsrv
และ pdo_sqlsrv
เป็นโมดูลสำหรับเชื่อมต่อและใช้งาน Microsoft SQL Server จาก PHP จำเป็นต้องพึ่งพา ODBC driver ที่ Microsoft จัดให้ ถ้าต้องใช้กับ ServBay ต้องคอมไพล์และติดตั้งก่อนใช้งาน ขั้นตอนด้านล่างนี้อธิบายวิธีติดตั้งทั้งสองอย่างนี้อย่างละเอียด
หมายเหตุ: เงื่อนไขสำคัญ
ใน macOS ก่อนคอมไพล์ sqlsrv
คุณต้องติดตั้ง Microsoft SQL Server ODBC driver (msodbcsql18
) และเครื่องมือ (mssql-tools18
) ก่อน โดยแพ็กเกจเหล่านี้ ServBay ไม่รวมมาให้ ต้องติดตั้งแยกเอง
แนะนำติดตั้งด้วย Homebrew หากยังไม่มี Homebrew ให้ไป เว็บ Homebrew
รันคำสั่งติดตั้ง Microsoft ODBC driver และ tools นี้ อาจต้องยอมรับเงื่อนไข (โดย set ตัวแปร HOMEBREW_ACCEPT_EULA=Y
):
bash
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18 mssql-tools18
1
2
3
2
3
โปรดตรวจสอบว่าติดตั้งทุก dependency สำเร็จก่อนคอมไพล์ โดยปกติจะลงที่ /opt/homebrew/
(Apple Silicon) หรือ /usr/local/
(Intel Mac) ต้องอ้าง path เหล่านี้ให้ถูกตอน build
เคล็ดลับ
sqlsrv
กับ pdo_sqlsrv
เป็นคนละโมดูล ต้องคอมไพล์แยกกัน แต่ขั้นตอนคล้ายกัน ตัวอย่างต่อไปนี้ขอใช้ sqlsrv
เป็นกรณีศึกษา
ขั้นตอนที่ 1: ติดตั้ง Microsoft ODBC driver & เครื่องมือ
(ดังที่กล่าวไว้แล้ว ให้ติดตั้งตาม Homebrew command ด้านบนนี้ เสร็จก่อนทุกครั้ง)
ขั้นตอนที่ 2: ดาวน์โหลดซอร์สโค้ด sqlsrv
เข้า PECL sqlsrv เลือกดาวน์โหลดซอร์สเวอร์ชันล่าสุดหรือเวอร์ชันที่ต้องการ ตัวอย่างนี้ใช้ 5.12.0
bash
wget https://pecl.php.net/get/sqlsrv-5.12.0.tgz # sqlsrv
wget https://pecl.php.net/get/pdo_sqlsrv-5.12.0.tgz # pdo_sqlsrv
1
2
2
ขั้นตอนที่ 3: แตกไฟล์ซอร์สและเข้าโฟลเดอร์
แตกไฟล์และเข้าโฟลเดอร์ที่ได้
bash
tar zxvf sqlsrv-5.12.0.tgz
cd sqlsrv-5.12.0
# pdo_sqlsrv คล้ายกัน จากนี้ขอยกตัวอย่างเฉพาะ sqlsrv
1
2
3
4
2
3
4
ขั้นตอนที่ 4: เตรียมสภาพแวดล้อมการคอมไพล์ (phpize)
ในโฟลเดอร์ซอร์ส รัน phpize
ของ PHP เวอร์ชันที่ต้องการ ระบุ path เต็ม
bash
${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/phpize
1
ขั้นตอนที่ 5: ตั้งค่าตัวเลือกคอมไพล์ (ระบุ path dependency)
ต้องตั้งค่าตัวแปรแวดล้อม LDFLAGS
และ CPPFLAGS
เพื่อช่วยให้ configure
เจอไลบรารีและ header จาก Homebrew ให้ถูกต้อง แล้วจึงรัน ./configure
พร้อมระบุ --with-php-config เช่นเดิม
ตัวอย่างสำหรับ Homebrew ที่ /opt/homebrew
(Apple Silicon Mac):
bash
export LDFLAGS="-L/opt/homebrew/lib ${LDFLAGS}"
export CPPFLAGS="-I/opt/homebrew/opt/unixodbc/include -I/opt/homebrew/include ${CPPFLAGS}" # เพิ่ม /opt/homebrew/include เพื่อไม่พลาด header บางตัว
./configure --with-php-config=${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/php-config
1
2
3
2
3
LDFLAGS
: บอก path ไลบรารีCPPFLAGS
: บอก path header${CPPFLAGS}
และ${LDFLAGS}
ช่วยไม่ทับค่าที่อาจตั้งไว้แล้วโดย ServBay
ขั้นตอนที่ 6: คอมไพล์และติดตั้งโมดูล
เมื่อ Makefile พร้อม ใช้ make และ make install:
bash
make -j ${CPU_NUMBER}
make install
1
2
2
make install
จะคัดลอก sqlsrv.so
และ pdo_sqlsrv.so
(ถ้ามี) ไปไว้ที่โฟลเดอร์ PHP extension ที่ถูกต้อง
ขั้นตอนที่ 7: เปิดใช้โมดูลใน ServBay
เมื่อคัดลอกไฟล์แล้ว ต้องเปิดใช้งานใน config ของ PHP
- เปิดแอป ServBay
- เมนูซ้ายไปที่
ภาษา
-PHP
-PHP 8.3
- ขวาเลือกแท็บ
PHP
เลื่อนถึง "พารามิเตอร์เพิ่มเติม" ใส่extension=sqlsrv.so
กับextension=pdo_sqlsrv.so
- กด
บันทึก
PHP จะรีสตาร์ทอัตโนมัติ
ขั้นตอนที่ 8: ตรวจสอบการโหลดโมดูล
เปิดใช้งานโมดูลแล้ว ต้องรีสตาร์ท PHP package ใน ServBay
หลังรีสตาร์ท ใช้คำสั่งนี้เพื่อตรวจสอบว่า sqlsrv
และ pdo_sqlsrv
โหลดสำเร็จหรือไม่:
bash
${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/php -m | grep sqlsrv
${SERVBAY_PACKAGE_FULL_PATH}/php/8.3/current/bin/php -m | grep pdo_sqlsrv
1
2
2
หากโหลดสำเร็จ จะเห็นชื่อของทั้งสองโมดูลในผลลัพธ์ หรือจะดูผ่าน phpinfo()
ก็ได้
คำถามที่พบบ่อย (FAQ)
- ถาม: คอมไพล์แล้วเจอ "Cannot find autoconf" หรือ error คล้าย ๆ กัน?
- ตอบ: เกือบ 100% ระบบสภาพแวดล้อมสำหรับการคอมไพล์ของ ServBay ยังไม่ถูกตั้งค่าถูกต้อง กลับไปอ่าน "เงื่อนไขเบื้องต้น" ที่หัวข้อ และดำเนินการตั้งค่าใหม่ตาม คู่มือคอมไพล์แพ็กเกจด้วย ServBay ให้ครบ ตรวจว่า tools จำเป็น (autoconf, automake, libtool) ติดตั้งครบและ PATH ถูกต้อง ปกติแค่รัน script init ของ ServBay และเปิด terminal ใหม่ก็จบ
- ถาม:
configure
error ไม่เจอไลบรารีหรือ header file?- ตอบ: ขาด dependency หรือ path ผิด
imagick
ต้องเช็กว่า ImageMagick dev library ติดตั้งแล้ว (brew install imagemagick
)sqlsrv
ต้องเช็กว่า msodbcsql18 กับ mssql-tools18 ติดตั้งครบ พร้อมทั้งตั้งค่าLDFLAGS
,CPPFLAGS
ถูกต้อง (ดูว่า path ชี้ไป /opt/homebrew/lib, /opt/homebrew/opt/unixodbc/include)- เช็กว่ามี path Homebrew อยู่ในตัวแปรแวดล้อมของ ServBay หรือ PATH ด้วย
- ตอบ: ขาด dependency หรือ path ผิด
- ถาม: make หรือ make install ล้มเหลว?
- ตอบ: มีหลายสาเหตุ:
- ขาด dependency: เช็ก error ว่าขาดไฟล์ไหน เพิ่ม dependency ตามที่แจ้ง
- ตั้งค่า configure ผิด: กลับไปดู parameter โดยเฉพาะ
--with-php-config
- สิทธิ์ไม่พอ: make install อาจต้องใช้ sudo ถ้าไปเขียนใน directory ที่จำเป็นต้องใช้สิทธิ์ root
- ไฟล์ซอร์สมีปัญหา: ดาวน์โหลดซ้ำหรือลองเวอร์ชันอื่น
- ตอบ: มีหลายสาเหตุ:
- ถาม: ไฟล์
.so
อยู่ใน extension dir แล้ว เปิดใน.ini
ก็ตาม แต่php -m
หรือphpinfo()
ยังไม่เห็น extension?- ตอบ:
- สาเหตุหลัก: PHP package ใน ServBay ยังไม่ได้รีสตาร์ท ต้องรีให้ครบ
- เช็กว่าไฟล์
.ini
ไม่มี typo, รูปแบบประมาณextension=modulename.so
- ตรวจว่า
extension_dir
ใน php.ini ชี้ถูกหรือไม่ (เช็กด้วยphp-config --extension-dir
) - โมดูลขัดแย้ง/ไม่เข้ากันหรือไฟล์เสีย คอมไพล์ใหม่ ตรวจสอบ log ใน logs ของ ServBay ว่ามี error โหลดโมดูลหรือไม่
- ตอบ:
สรุป
เมื่อทำตามขั้นตอนในบทความนี้ คุณจะสามารถคอมไพล์และติดตั้งโมดูล PHP เพิ่มเติม เช่น imagick
และ sqlsrv
ลงในสภาพแวดล้อมพัฒนา ServBay บน macOS ได้สำเร็จ โดยมีจุดสำคัญที่ควรเน้นย้ำคือ
- ตั้งค่าสภาพแวดล้อมการคอมไพล์ ServBay อย่างถูกต้องและครบถ้วน ก่อนเริ่มงาน
- เลือกเวอร์ชัน PHP ที่ต้องการและใช้ path ที่ถูกต้องเสมอลงในทุกคำสั่ง (โดยเฉพาะ
phpize
,php-config
) - แก้ไขปัญหา dependency ของแต่ละโมดูลให้ครบจากภายนอก (เช่น ImageMagick, Microsoft ODBC) โดยระบุ path ผ่าน environment variable ให้
configure
เจอครบ - เปิดใช้งาน extension ให้ถูกต้อง แก้ไขไฟล์
.ini
หรือใส่พารามิเตอร์ผ่าน GUI ของ ServBay - รีสตาร์ท PHP package ใน ServBay ทุกครั้งหลังแก้ config เพื่อให้การเปลี่ยนแปลงมีผล
ServBay เป็นสภาพแวดล้อมที่อเนกประสงค์และปรับขยายได้สูง ครอบคลุม stack ยอดนิยมทั้ง MySQL, PostgreSQL, MongoDB, Redis, Caddy, Nginx, Apache, Node.js, Python, Go, Java, .NET, Ruby, Rust ฯลฯ พร้อมฟีเจอร์ย่อยอาทิ ระบบ SSL จริงผ่าน ACME, ตั้งค่า CORS ง่าย, สำรองข้อมูลอัตโนมัติ (ทั้ง Database, เว็บไซต์, SSL), รีเซ็ตรหัส root ของฐานข้อมูล, สร้าง CA สำหรับหลากหลาย domain HTTPS ในระบบ DEV
หวังว่าคู่มือนี้จะช่วยขยายขีดความสามารถและตอบโจทย์การพัฒนาเว็บบน ServBay ของคุณได้อย่างสมบูรณ์ หากเจอปัญหาอื่น ๆ โปรดดูเอกสารคู่มือและ community ของ ServBay ประกอบ