เปิดใช้งานและใช้งาน MongoDB ใน ServBay (PHP Extension และ Database Service)
ServBay คือสภาพแวดล้อมพัฒนาเว็บแบบโลคอลที่ทรงพลัง ออกแบบมาเพื่อให้นักพัฒนาสามารถใช้งานเว็บเซิร์ฟเวอร์หลายตัว, ภาษาโปรแกรม, และฐานข้อมูลต่าง ๆ ได้อย่างง่ายดาย พร้อมทั้งรวมเอาส่วนขยายและเครื่องมือที่ใช้งานบ่อยไว้ให้แล้ว สำหรับนักพัฒนา PHP ที่ต้องการใช้ฐานข้อมูล MongoDB, ServBay ได้เตรียมเครื่องมือให้สามารถเปิดใช้งาน MongoDB Extension ของ PHP และรันบริการฐานข้อมูล MongoDB ได้อย่างสะดวก
บทความนี้จะอธิบายวิธีเปิดใช้งาน PHP MongoDB Extension ใน ServBay, การเริ่มต้นบริการฐานข้อมูล MongoDB และตัวอย่างการเชื่อมต่อ MongoDB จากโปรเจกต์ PHP ของคุณ
ภาพรวม: ServBay กับ MongoDB
MongoDB คือฐานข้อมูล NoSQL แบบเอกสารที่มีประสิทธิภาพสูง, โอเพ่นซอร์ส และรองรับการขยายตัวได้ดี เหมาะกับเว็บแอพสมัยใหม่ที่ต้องการโครงสร้างข้อมูลที่ยืดหยุ่นและปรับขยายได้
ServBay ได้นำ MongoDB มาเป็นหนึ่งในซอฟต์แวร์แพ็คเกจที่ให้พร้อมใช้งานในโลคอล ช่วยให้นักพัฒนาติดตั้งและจัดการ MongoDB บนเครื่องตัวเองได้อย่างง่ายดาย นอกจากนี้ ServBay ยังรวบรวมและคอมไพล์ MongoDB extension (mongodb.so
) สำหรับ PHP หลายเวอร์ชัน ให้นำไปใช้เชื่อมต่อกับฐานข้อมูลในแอปพลิเคชัน PHP ได้โดยตรง
ในการใช้งาน MongoDB ในโปรเจกต์ PHP คุณต้องดำเนินการ 2 ขั้นตอนหลัก:
- เปิดใช้งาน PHP MongoDB Extension: ทำให้โค้ด PHP สามารถเรียกใช้ฟังก์ชัน MongoDB ได้
- เริ่มบริการฐานข้อมูล MongoDB: เพื่อให้มีอินสแตนซ์ฐานข้อมูลรันอยู่จริงสำหรับเก็บและจัดการข้อมูล
ServBay มาพร้อม GUI ที่ช่วยทำขั้นตอนเหล่านี้ได้ง่ายมาก
เวอร์ชันของ PHP MongoDB Extension
ServBay รองรับ MongoDB extension ตามเวอร์ชัน PHP ที่ใช้งาน เวอร์ชันของ extension อาจเปลี่ยนตามการอัพเดตของ ServBay โดยทั่วไปจะเลือกเวอร์ชันที่เสถียรและเข้ากันได้ดีที่สุด ดูตารางเวอร์ชันยอดนิยมดังต่อไปนี้ (กรุณาอ้างอิงตามเวอร์ชัน ServBay ที่คุณใช้งาน):
- PHP 5.6, 7.0: MongoDB 1.7.5
- PHP 7.1, 7.2, 7.3, 7.4: MongoDB 1.11.1
- PHP 8.0, 8.1, 8.2, 8.3: MongoDB 1.15.0
- PHP 8.4: MongoDB 1.19.1
โปรดทราบ PHP Extension (mongodb.so
) เพียงแค่เปิดให้ PHP สามารถสื่อสารกับฐานข้อมูล MongoDB ได้จริง ๆ ในการใช้งานจริงควรติดตั้ง MongoDB PHP Driver อย่างเป็นทางการ ผ่าน Composer
วิธีเปิดใช้งาน PHP MongoDB Extension
โดยดีฟอลต์ เพื่อลดความซับซ้อนของสภาพแวดล้อม ส่วนขยายบางอย่างของ PHP ใน ServBay อาจยังไม่ได้เปิดใช้งาน วิธีที่แนะนำและง่ายที่สุดคือเปิดผ่าน GUI ของ ServBay
เปิดใช้งานผ่าน ServBay GUI
วิธีที่สะดวกและรวดเร็วที่สุด:
- เปิดแอป ServBay
- ที่แถบเมนูด้านซ้าย คลิก Languages (ภาษา) จากนั้นเลือก PHP
- เลือกเวอร์ชัน PHP ที่ต้องการเปิด MongoDB Extension (เช่น
PHP 8.4
) - ที่แผงด้านขวา เลื่อนลงไปที่ส่วน Extensions (ส่วนขยาย)
- มองหาส่วน
MongoDB
extension - คลิกสวิตช์ทางซ้ายของ
MongoDB
เพื่อเปลี่ยนจากสีเทา (ปิด) ให้เป็นสีเขียว (เปิด) - กดปุ่ม Save (บันทึก) ที่มุมล่างของแผง
ServBay จะปรับแต่งไฟล์ config ให้คุณโดยอัตโนมัติและรีสตาร์ท PHP เวอร์ชันดังกล่าวให้การเปลี่ยนแปลงมีผล
เปิดใช้งานด้วยตนเองผ่านไฟล์ config (ขั้นสูง)
หากคุณต้องการตั้งค่าแบบ manual หรือปรับแต่งพิเศษ สามารถแก้ไฟล์ config ได้โดยตรง (แต่โดยทั่วไปการใช้ GUI ก็เพียงพอแล้ว)
ไปที่โฟลเดอร์ตามเวอร์ชัน PHP ที่ใช้ เช่น หากต้องการเปิด MongoDB Extension สำหรับ PHP 8.3 ให้เข้าไปที่:
bash/Applications/ServBay/etc/php/8.3/conf.d/mongodb.ini
1เส้นทางอาจต่างไป ขึ้นอยู่กับที่ติดตั้ง ServBay และเวอร์ชัน PHP
ใช้ text editor เปิดไฟล์
mongodb.ini
ค้นหาบรรทัดด้านล่าง:
ini[MongoDB] ; Uncomment the following line to enable MongoDB ;extension = mongodb.so
1
2
3ลบเครื่องหมาย
;
หน้าบรรทัดextension = mongodb.so
(ยกเลิกคอมเมนต์):ini[MongoDB] ; Uncomment the following line to enable MongoDB extension = mongodb.so
1
2
3บันทึกไฟล์
สำคัญ: หลังปรับแต่งไฟล์ config ด้วยตนเอง ต้องรีสตาร์ท PHP เวอร์ชันที่แก้ไขผ่าน ServBay GUI โดยไปที่ Packages (ซอฟต์แวร์แพ็คเกจ) ทางแถบเมนูซ้าย หา PHP เวอร์ชันที่ปรับ และกดปุ่มรีสตาร์ท (มักเป็นไอคอนลูกศรวงกลม)
วิธีเริ่มต้น MongoDB Database Service
การเปิดใช้งาน PHP Extension ทำให้ PHP คุยกับ MongoDB ได้ แต่คุณต้องมีฐานข้อมูล MongoDB ที่รันอยู่จริงเพื่อเก็บและจัดการข้อมูล ServBay มีแพ็คเกจ MongoDB ให้พร้อมใช้งาน สามารถรันได้ผ่าน GUI
- เปิดแอป ServBay
- ที่แถบเมนูซ้าย คลิก Packages (ซอฟต์แวร์แพ็คเกจ)
- ในรายการแพ็คเกจ เลื่อนไปที่หมวด Databases (ฐานข้อมูล)
- หา
MongoDB
- กดสวิตช์ฝั่งซ้ายของ
MongoDB
เพื่อเปลี่ยนจากเทา (หยุด) เป็นเขียว (กำลังรัน)
MongoDB Database Service จะเริ่มที่พอร์ตเริ่มต้น 27017
ตรวจสอบโมดูล MongoDB และการเชื่อมต่อฐานข้อมูล
หลังดำเนินการข้างต้น สามารถตรวจสอบได้ว่าการโหลด PHP MongoDB Extension และการรันบริการฐานข้อมูล MongoDB สำเร็จหรือไม่ด้วยวิธีดังต่อไปนี้
ตรวจสอบว่า PHP Extension โหลดสำเร็จหรือไม่
สร้างไฟล์ PHP อย่างง่ายเพื่อดูผลลัพธ์จาก phpinfo()
:
- ใน web root ของ ServBay (เช่น
/Applications/ServBay/www
) สร้างไฟล์ PHP ใหม่ชื่อphpinfo.php
- ใส่เนื้อหาดังนี้:php
<?php phpinfo(); ?>
1
2
3 - เปิดไฟล์ผ่านเบราว์เซอร์ เช่น
https://servbay.demo/phpinfo.php
(สมมติว่าservbay.demo
มีการตั้งค่าไว้แล้ว) - ในหน้า
phpinfo
ที่แสดงผล, ค้นหา "MongoDB" ถ้า extension โหลดได้จริง จะเจอส่วน "mongodb" พร้อมแสดงข้อมูลเวอร์ชันและรายละเอียด config
(หมายเหตุ: ภาพหน้าจออาจต่างกันขึ้นอยู่กับเวอร์ชัน ServBay หรือหน้าตา UI ที่คุณใช้งาน)
ตรวจสอบการเชื่อมต่อฐานข้อมูล
สร้างสคริปต์ PHP สั้น ๆ สำหรับเชื่อมต่อ MongoDB ที่รันอยู่ในเครื่อง
- ตรวจสอบว่าติดตั้ง MongoDB PHP Driver ผ่าน Composer แล้ว หากยัง ให้รันในเทอร์มินัลที่โฟลเดอร์โปรเจกต์:bash
composer require mongodb/mongodb
1 - สร้างไฟล์ PHP ชื่อ
test_mongodb.php
- ใส่โค้ด:php
<?php require __DIR__ . '/vendor/autoload.php'; // ปรับเส้นทางตามโครงสร้างโปรเจกต์ echo "Attempting to connect to MongoDB...\n"; try { // เชื่อมต่อ MongoDB ที่รันในเครื่อง พอร์ต 27017 $client = new MongoDB\Client("mongodb://localhost:27017"); // ลองลิสต์ชื่อฐานข้อมูลเพื่อตรวจสอบว่าเชื่อมต่อสำเร็จ $listDatabases = $client->listDatabases(); echo "Successfully connected to MongoDB!\n"; echo "Available databases:\n"; foreach ($listDatabases as $databaseInfo) { echo "- " . $databaseInfo->getName() . "\n"; } } catch (\MongoDB\Driver\Exception\Exception $e) { echo "Failed to connect to MongoDB: " . $e->getMessage() . "\n"; } ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 - รันสคริปต์นี้ผ่านเทอร์มินัลด้วย PHP ของ ServBay หรือเปิดผ่านเว็บเซิร์ฟเวอร์ ถ้าเชื่อมต่อสำเร็จ จะเห็นข้อความแสดงความสำเร็จพร้อมรายชื่อฐานข้อมูล หากล้มเหลว ดูข้อความ error เพื่อวิเคราะห์ปัญหา (เช่น MongoDB Service ยังไม่ได้รัน)
การใช้งาน MongoDB ใน PHP
เมื่อ PHP MongoDB Extension เปิดใช้งานแล้วและฐานข้อมูล MongoDB กำลังรัน คุณสามารถติดตั้ง MongoDB PHP Driver ผ่าน Composer และเริ่มสั่งงานต่าง ๆ ได้ในโปรเจกต์ PHP
ติดตั้ง MongoDB PHP Driver
ติดตั้ง driver อย่างเป็นทางการผ่าน Composer:
bash
composer require mongodb/mongodb
1
จะมีการดาวน์โหลดแพ็คเกจ mongodb/mongodb
พร้อม dependencies และสร้างไฟล์ vendor/autoload.php
ตัวอย่างโค้ด
ตัวอย่างโค้ดสั้น ๆ ต่อไปนี้ แสดงการเชื่อมต่อ MongoDB, การ insert ข้อมูล และการ query ข้อมูล:
php
<?php
require __DIR__ . '/vendor/autoload.php'; // แน่ใจว่าโหลด autoload ของ Composer
echo "Connecting to MongoDB...\n";
try {
// เชื่อมต่อ MongoDB ในเครื่อง
$client = new MongoDB\Client("mongodb://localhost:27017");
// เลือกฐานข้อมูลและ collection
// MongoDB จะสร้างฐานข้อมูล/collection ให้อัตโนมัติหากยังไม่มี
$collection = $client->servbay_demo_db->users; // ตัวอย่างชื่อฐานข้อมูล
echo "Connected. Performing operations...\n";
// เพิ่มข้อมูล (document)
$insertResult = $collection->insertOne([
'name' => 'Alice ServBay', // ข้อมูลตัวอย่าง มีชื่อแบรนด์
'email' => '[email protected]',
'age' => 30,
'createdAt' => new MongoDB\BSON\UTCDateTime(time() * 1000) // ใช้ BSON วันที่
]);
printf("Inserted document with ID: %s\n", $insertResult->getInsertedId());
// ค้นหาข้อมูล
$document = $collection->findOne(['name' => 'Alice ServBay']);
echo "Found document:\n";
if ($document) {
print_r($document);
} else {
echo "Document not found.\n";
}
// อัปเดตข้อมูล (ไม่บังคับ)
$updateResult = $collection->updateOne(
['name' => 'Alice ServBay'],
['$set' => ['age' => 31, 'status' => 'updated']]
);
printf("Matched %d document(s) for update, modified %d document(s).\n", $updateResult->getMatchedCount(), $updateResult->getModifiedCount());
// ค้นหาข้อมูลหลังอัปเดต (ไม่บังคับ)
$updatedDocument = $collection->findOne(['name' => 'Alice ServBay']);
echo "Updated document:\n";
if ($updatedDocument) {
print_r($updatedDocument);
}
// ลบข้อมูล (ไม่บังคับ)
// $deleteResult = $collection->deleteOne(['name' => 'Alice ServBay']);
// printf("Deleted %d document(s).\n", $deleteResult->getDeletedCount());
} catch (\MongoDB\Driver\Exception\Exception $e) {
echo "An error occurred: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
echo "An unexpected error occurred: " . $e->getMessage() . "\n";
}
echo "Script finished.\n";
?>
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
บันทึกไฟล์นี้เป็น PHP แล้วรันผ่าน CLI ของ ServBay หรือเปิดผ่านเว็บเซิร์ฟเวอร์ที่ตั้งค่าใน ServBay
ข้อควรระวังและแนวทางที่แนะนำ
- สถานะบริการ MongoDB: ต้องแน่ใจว่า MongoDB package ใน ServBay GUI คือกำลัง "รันอยู่" ถึงจะเชื่อมต่อได้
- พอร์ตเริ่มต้น: ปกติ MongoDB จะรันที่พอร์ต
27017
หากแอปพลิเคชันคุณเชื่อมต่อที่พอร์ตอื่น ต้องระบุพอร์ตดังกล่าวใน string connection ใน ServBay GUI สามารถตรวจสอบ/เปลี่ยนค่าได้ - Extension vs. Driver: ไฟล์
mongodb.so
(extension) ให้ความสามารถเชื่อมต่อระดับต่ำ ส่วนแพ็คเกจ Composermongodb/mongodb
มี API ที่ทันสมัย ใช้ง่ายและเน้น OOP โปรเจกต์ PHP ส่วนใหญ่จะแนะนำให้ใช้ผ่าน Composer - ServBay User CA/Public CA: ServBay สนับสนุนการออกใบรับรอง SSL ด้วย CA ในตัว มีประโยชน์ในการพัฒนาเว็บ local ที่ต้องการ HTTPS ในการเชื่อมต่อ MongoDB แบบ local มักไม่จำเป็นต้องใช้ SSL แต่อาจมีบางกรณีหรือ config ที่สูงขึ้นต้องการ ServBay ยังรองรับ ACME ขอใบรับรองจริง, สำรองข้อมูล, และรีเซ็ตรหัสผ่านฐานข้อมูลได้ นี่เป็นจุดแข็งที่สำคัญในฐานะ local dev environment เต็มรูปแบบ
- เครื่องมือจัดการฐานข้อมูล: ServBay อาจไม่มี GUI สำหรับ MongoDB แต่คุณสามารถดาวน์โหลด MongoDB Compass หรือใช้เครื่องมือบรรทัดคำสั่ง
mongo
,mongosh
ในการจัดการ MongoDB ที่ติดตั้งในเครื่องผ่าน ServBay
คำถามที่พบบ่อย (FAQ)
ถาม: เปิด PHP MongoDB Extension แล้วแต่ PHP ยังเชื่อมต่อ MongoDB ไม่ได้ ต้องทำอย่างไร?
ตอบ: กรุณาตรวจสอบว่าเริ่มบริการฐานข้อมูล MongoDB แล้วใน ServBay GUI เพราะ extension เป็นเพียงตัวกลาง แต่ฐานข้อมูลต้องรันอยู่จริงด้วย รวมถึงตรวจสอบ connection string ว่าถูกต้องหรือไม่ (เช่น mongodb://localhost:27017
)
ถาม: ต่างกันอย่างไรระหว่าง mongodb.so
extension กับแพ็คเกจ Composer mongodb/mongodb
?
ตอบ: mongodb.so
คือส่วนขยายที่ PHP โหลดเพื่อใช้ติดต่อกับ MongoDB ผ่านไลบรารี C (libmongoc) ส่วน mongodb/mongodb
ผ่าน Composer ใช้ API ระดับสูงแบบ OOP บนฐาน extension เดิม ในงาน PHP สมัยใหม่จำเป็นต้องเปิด extension และติดตั้งแพ็คเกจ Composer ควบคู่กัน
ถาม: จะเปลี่ยนพอร์ตหรือค่าคอนฟิก MongoDB ได้อย่างไร?
ตอบ: ตั้งค่าผ่าน ServBay GUI ในแพ็คเกจ MongoDB ได้เลย หากต้องการตั้งค่าขั้นสูงกว่า อาจต้องแก้ไขไฟล์คอนฟิกของ MongoDB โดยสามารถดูเส้นทางไฟล์จากหน้ารายละเอียดแพ็คเกจใน ServBay จากนั้นรีสตาร์ท MongoDB ให้ตั้งค่ามีผล
สรุป
ServBay เป็นตัวเลือกที่สะดวกมากสำหรับนักพัฒนา PHP ที่ต้องการทำงานร่วมกับ MongoDB เพราะมีทั้ง interface ที่ใช้งานง่าย เปิด/ปิด extension ได้รวดเร็ว รวมถึงพร้อมให้บริการ MongoDB แบบติดตั้งและรันได้ทันที เมื่อติดตั้ง driver ผ่าน Composer แล้ว การเซ็ตอัพ local dev environment สำหรับ PHP + MongoDB จะง่ายและประหยัดเวลากว่าเดิม ให้คุณโฟกัสกับ logic โปรแกรมและทดสอบได้เต็มที่ ไม่ต้องปวดหัวกับการ config สภาพแวดล้อมให้พอดี ServBay ช่วยให้การพัฒนาและทดสอบ local ง่ายขึ้นอย่างเห็นได้ชัด