จากรูป
ผมจะเขียนไฟล์ PHP ยังไงให้เครื่อง server 2 และ 3 สามารถดึงข้อมูล Database (บางตาราง และบางคอลั่ม) จาก server 1 มา Update ได้ครับ.
แบบว่าเปิดไฟล์ขึ้นมา และมีปุ่มให้กด ถึงจะเริ่มทำการโอน (update) ข้อมูล
โดยเครื่อง Server แต่ละเครื่องจะอยู่กันคนละที่นะครับ แต่ผมใช้ no-ip ในการติดต่อกัน
ผมเคยทำระบบประมาณนี้ตอนที่ยังทำงานประจำอยู่ ลองแบบนี้ดูนะครับ
ที่ Server1 : - สร้างไฟล์ php (สมมุติชื่อไฟล์ serv1.php) เพื่ออ่านข้อมูลที่ต้องการจะส่งกลับไปให้ Server2 หรือ Server3 แล้ว echo ออกมาในรูปแบบ JSON
ตัวอย่าง $arr_row = array();
/** ตรงนี้ใช้ loop while ทำการ fetch ข้อมูลที่อ่านได้มาใส่ใน $arr_row **/
while($row = mysql_fetch_array($res)){
array_push($arr_row, array("field_name1" => $row[field_name1], "field_name2" => $row[field_name2]));
}
/** แสดงผลมันออกมา **/
echo json_encode($arr_row);
ที่ Server2,Server3 : - สร้างไฟล์ php โดยในไฟล์ก็มีเนื้อหาประมาณนี้
/** สร้างตัวแปรมารับ json string ที่เรียกมาจาก Server1 **/
$json = file_get_contents("
http://www.Server1.com/serv1.php ");
/** แปลง json string ให้เป็น object เก็บไว้ในตัวแปร $data **/
$data = json_decode($json);
/** สร้างตัวแปร array แล้วใช้ foreach ใส่ข้อมูลเข้าไปเป็น array แบบสองมิติ **/
$arr_row = array();
foreach ($data as $row => $val) {
array_push($arr_row, array("field_name1" => $val->{'field_name1'}, "field_name2" => $val->{'field_name2'}));
}
จากนั้นก็สร้าง recursive function ให้ทำการเขียนข้อมูลลงใน MySQL โดยเช็คว่าถ้า insert ข้อมูลใน row ปัจจุบันสำเร็จ แล้วค่อยทำการ insert row ถัดไปครับ
หมายเหตุ : 1. ที่ไม่ใช้คำสั่งทำการ insert ใน Loop ของ foreach เนื่องจากจะเกิดปัญหาคอขวดครับ เขียนลง DB ไม่ทันกับคำสั่ง insert ที่ส่งเข้ามา
2. ควรจะสร้างเงื่อนไข หรือ logic พิเศษบางอย่างเพิ่มเติมเข้าไปในไฟล์ serv1.php ด้วยนะครับ เพื่อป้องกันการเรียกใช้ไฟล์นี้จากผู้อื่นที่ไม่ได้เกี่ยวข้องกับระบบงาน อันนี้ฝากไปคิดเอาเองนะครับ
3. ถ้าพี่ ๆ เพื่อน ๆ ท่านอื่น มีข้อแนะนำเพิ่มเติม ก็จักเป็นพระคุณอย่างยิ่งครับ