เขียน PHP คุยกับ Cloud storage backblaze.com

คือ website ที่ทำ cms เองพอนานๆไปพวก image ต่างๆจะเริ่มเป็นปัญหากับ Server เช่นพวก gallery ต่างๆเพราะ มันใช้พื้นที่ค่อนข้างเปลือง (นับๆงานตัวนี้อายุประมาณ 4 ปีแล้วใช้พื้นที่เฉพาะ image ไปประมาณ 30 – 40 G แล้ว) ก็เลยดูๆ solution ต่างๆ ก็ถามๆชาวบ้านดู Ford เลยแนะนำ backblaze.com มาให้ลองโดยบอกว่า ถูกที่สุด แล้วล่ะ คือผมเองก็ไม่แน่ใจ image พวกนี้จะยังมีการ access อยู่หรือเป่าเลยอยากกลองถูกๆก่อน ถ้ามันไม่พอหรือไม่เหมาะสมค่อยย้ายอีกที

ราคา backblaze b2 cloud storage ก็ถูกสุดจริงๆนั่นแหล่ะ
ราคา backblaze b2 cloud storage ก็ถูกสุดจริงๆนั่นแหล่ะ

โจทย์คือย้าย image ปีเก่าๆไปเก็บบน backblaze.com

  1. วิเคราะห์แนวทางก่อนผมค่อนข้างโชคดีหน่อยตอนที่ทำ Database แต่แรกทำการแยก filed พวก image ต่างๆไว้ค่อนข้างละเอียดทำให้แค่ไปกำหนด varchar ใหม่จากเดิม varchar(30) ที่เก็บแต่ชื่อ file อย่างเดียว ก็แก้เป็น varchar(150) เพื่อเก็บ URL ใหม่ทั้งอัน

    table ข้อมูลใน database
    table ข้อมูลใน database เก็บ GALLERY_PIC แยกได้อย่างดีสบายๆ
  2. ทำระบบ cronjob เรียก PHP Script ให้ค่อยๆทำการ Upload รูปใน Website โดยเรียกจาก GALLERY_PIC นี่แหล่ะไล่จากเก่าไปใหม่ให้ทยอย Upload ไปไว้บน backblaze.com เสร็จแล้วนำ URL Image ใหม่ที่ได้บันทึกกลับเข้าไปใน Database
  3. แก้ไขหน้า frontend เพิ่มเติมซักหน่อยให้ฉลาดเรียกรูปได้ทั้งใน local เครื่องตัวเองและจาก backblaze.com

การทำงานคร่าวๆแค่นี้แหล่ะ

Script สำหรับ Upload File เข้า backblaze.com

  1. ให้ลงทะเบียนและ Login เข้า Website ไปให้เรียบร้อยเสร็จแล้วสร้าง Bucket ขึ้นมา 1 ตัวชื่อตามใจชอบ

    สร้าง Bucket Project ขึ้นมา
    สร้าง Bucket Project ขึ้นมา
  2. สิ่งที่ต้องใช้คือ Account ID , Application Key , Bucket ID ที่จดเอาไว้จากหน้า Website ได้เลย (ห้ามให้คนอื่นทราบเสมือนเป็น user password นั่นแหล่ะ)
  3. เสร็จแล้วลองเข้าไปอ่าน API Overview ที่ https://www.backblaze.com/b2/docs/ จะมีรายละเอียดการเชื่อมต่อให้เราเขียนติดต่อ API เข้าไป

    ตัวอย่าง PHP b2_authorize_account สรุปอ่านง่ายเข้าใจดี
    ตัวอย่าง PHP b2_authorize_account สรุปอ่านง่ายเข้าใจดี
  4. ผมลองอ่านๆและแกะดู API เอาเท่าที่ใช้งานออกมาก็มีดังนี้
    1. เรียก api b2_authorize_account โดยใช้ Account ID และ Application Key เพื่อให้ได้ Token และ Download URL
    2. เรียก api b2_get_upload_url โดยใช้ Token จาก b2_authorize_account และ Bucket ID เรียกเข้าไปจะได้ uploadUrl ออกมา
    3. เรียก api b2_upload_file เพื่อ Upload รูปโดยใช้ uploadUrl จาก b2_get_upload_url ในการเรียก
    4. เสร็จเรียบร้อยเอา string มาต่อกันได้ URL รูปที่ Upload ไปเอากลับไป update ใน Database ฝั่งเราก็จบล่ะ
  5. Script ทั้งหมดมีดังนี้

    กรณีที่บน backblaze ยังไม่มี folder ดังกล่าวตามใน website เราเช่น ใน website เราวาง path /upload/image/2017-07/ เอาไว้แต่บน backblaze มันยังไม่มีก็ไม่เป็นไรครับ กำหนดที่ bucket_file ได้เลยเดี๋ยวระบบจะไปสร้าง folder ใหม่ให้เอง
  6. ที่เหลือก็ตามแต่ใครจะเอาไปออกแบบเองแหล่ะ คร่าวๆประมาณนี้แหล่ะ ที่เหลือค่อยไปดูกันว่า file ที่เราเก็บมีการเรียกใช้งานบ่อยแค่ไหน ใช้มากจ่ายมาก ใช้น้อยจ่ายน้อยตามนั้น
ความคิดเห็น