วิธีการเพิ่มขนาดการอัปโหลดไฟล์ในกรณีที่ใช้ PHP ใน Elastic Beanstalk

สำหรับผู้ที่ใช้งาน PHP ใน Elastic Beanstalk รันเว็บไซต์ แล้วเจอปัญหาเกี่ยวกับการอัปโหลดไฟล์โดยมี Error แจ้งเตือนว่า "413 Request Entity Too Large" แบบนี้ เราสามารถเพิ่มการตั้งค่าให้กับโปรเจกต์ของเราไปยัง Elastic Beanstalk ให้อัปโหลดไฟล์ตามขนาดที่ต้องการได้ ซึ่งผมจะมาอธิบายวิธีการในบทความนี้ครับ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

POP จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้ผมจะมาแนะนำวิธีการเพิ่มขนาดการอัปโหลดไฟล์ในกรณีที่ใช้ PHP ใน Elastic Beanstalk เพื่อให้สามารถอัปโหลดไฟล์ตามขนาดที่ต้องการใน Elastic Beanstalk ได้ครับ

สิ่งที่ต้องมี

  • มี Application และ Environment ใน Elastic Beanstalk แล้ว

ในบทความนี้ผมจะละเว้นการอธิบายในส่วนของการสร้าง Application และ Environment ใน Elastic Beanstalk
หากผู้อ่านต้องการเรียนรู้วิธีการเริ่มต้นใช้งาน Elastic Beanstalk ผมขอแนะนำให้อ่านบทความด้านล่างนี้ครับ

เตรียมไฟล์สำหรับ Deploy เพื่อใช้ตั้งค่าใน Elastic Beanstalk

ขั้นตอนการเตรียมไฟล์นี้เราสามารถสร้างไฟล์ที่จะใช้ Deploy ใน Notepad หรือ VSCode ก็ได้ ซึ่งในบทความนี้ผมจะสร้างไฟล์ในโปรแกรม VSCode ครับ

สำหรับผู้ใช้งานที่ยังไม่มีโปรแกรม VSCode ดาวน์โหลดและติดตั้งตามตัวอย่างลิงก์บทความด้านล่างนี้ได้เลยครับ

เราจะมาทำการสร้างไฟล์เว็บไซต์ที่ใช้ทดสอบการอัปโหลดไฟล์ และสร้างไฟล์ที่ใช้ตั้งค่าเพิ่มขนาดการอัปโหลดไฟล์ให้กับเว็บไซต์ใน Nginx และ PHP ตามขนาดที่เราต้องการใน Elastic Beanstalk
ตัวอย่างนี้ผมต้องการอัปโหลดไฟล์ขนาดไม่เกิน 30M ก็จะตั้งค่าไว้ที่30Mครับ

  • สร้างไฟล์เว็บไซต์ที่ใช้ทดสอบการอัปโหลดไฟล์ขนาดที่ต้องการ
    • form.php
    • upload.php
  • สร้างไฟล์ที่ใช้ตั้งค่าเพิ่มขนาดการอัปโหลดไฟล์ขนาดที่ต้องการ
    • .platform/nginx/conf.d/elasticbeanstalk/10_nginx_upload_file_size.conf
    • .ebextensions/10_php_upload_file_size.config

ข้อควรระวัง: ถ้าชื่อโฟลเดอร์และไฟล์ผิด หรือ สร้างโฟลเดอร์และไฟล์ไม่ตรงตามตัวอย่างที่เขียนไว้ เมื่อ Deploy ไปยัง Elastic Beanstalk แล้ว ระบบจะไม่ปรับการตั้งค่าให้

ก่อนเริ่มทำการสร้างไฟล์ที่ใช้ Deploy ให้สร้างโฟลเดอร์ใน Windows เช่น โฟลเดอร์ชื่อ deploy เป็นต้น แล้วเปิดโปรแกรม VSCode ขึ้นมา แล้วคลิก Open Folder แล้วเลือกโฟลเดอร์ deploy ที่สร้างไว้เมื่อสักครู่นี้ จากนั้นเริ่มทำขั้นตอนถัดไปได้เลย (โฟลเดอร์ deploy เป็นแค่ตัวอย่างในบทความนี้เท่านั้น)

เกี่ยวกับรหัสฟีดบรรทัด (New Line) [ LF, CRLF ]

ก่อนที่จะทำการเตรียมไฟล์สำหรับ Deploy ให้ดูวิธีการเปลี่ยนประเภทไฟล์จาก CRLF ให้เป็น LF ตามลิงก์หัวข้อด้านล่างนี้

ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: เกี่ยวกับรหัสฟีดบรรทัด (New Line) [ LF, CRLF ]

สร้างไฟล์ form.php

ผมจะสร้างไฟล์ form.php ขึ้นมาเพื่อใช้ทดสอบการอัปโหลดไฟล์

สร้างไฟล์form.phpและคัดลอกโค้ดด้านล่างนี้วางลงในไฟล์

files:
    "/etc/php.d/99uploadsize.ini":
        mode: "000644"
        owner: root
        group: root
        content: |
            upload_max_filesize = 30M
            post_max_size = 30M
commands:
    remove_old_ini:
        command: "rm -f /etc/php.d/99uploadsize.ini.bak"

สร้างไฟล์ upload.php

ผมจะสร้างไฟล์ upload.php ขึ้นมาเพื่อใช้ทดสอบการอัปโหลดไฟล์โดยแสดงผลลัพธ์ของขนาดไฟล์ต่อจากหน้า form.php

สร้างไฟล์upload.phpและคัดลอกโค้ดด้านล่างนี้วางลงในไฟล์

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
   <body>
      <p><?php

         if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
           echo "file size =" . $_FILES["upfile"]["size"];
         } else {
           echo "error";
         }

      ?></p>
   </body>
</html>

เพิ่มขนาดการอัปโหลดไฟล์สำหรับ NGINX

ให้สร้างไฟล์ "10_nginx_upload_file_size.conf" ตาม path ด้านล่างนี้
Path: ".platform/nginx/conf.d/elasticbeanstalk/10_nginx_upload_file_size.conf"

แล้วคัดลอกโค้ดด้านล่างนี้วางในไฟล์10_nginx_upload_file_size.conf

client_max_body_size 30M;
client_body_buffer_size 30M;

เพิ่มขนาดการอัปโหลดไฟล์สำหรับ PHP

ต่อไปให้สร้างไฟล์ "10_php_upload_file_size.config" ตาม path ด้านล่างนี้
Path: ".ebextensions/10_php_upload_file_size.config"

แล้วคัดลอกโค้ดด้านล่างนี้วางในไฟล์10_php_upload_file_size.config

files:
    "/etc/php.d/99uploadsize.ini":
        mode: "000644"
        owner: root
        group: root
        content: |
            upload_max_filesize = 30M
            post_max_size = 30M
commands:
    remove_old_ini:
        command: "rm -f /etc/php.d/99uploadsize.ini.bak"

Deploy Project

เมื่อเตรียมไฟล์เสร็จแล้วให้ทำการสร้างไฟล์ ZIP เตรียมไว้ เพื่อใช้ในการ Deploy ครับ

ในตัวอย่างนี้ผมได้สร้างไฟล์ต่างๆในโฟลเดอร์ที่ชื่อว่า deploy ผมก็จะเข้าไปที่โฟลเดอร์นั้น และรวมไฟล์ทั้งหมดให้เป็นไฟล์ ZIP
จากนั้นก็ Upload ใน Application versions ของ Elastic Beanstalk และทำการ Deploy ไปยัง Environment ที่กำลังใช้งานอยู่ครับ

ตัวอย่างการ Deploy

ตรวจสอบการตั้งค่า Config ใน EC2 Instance

คลิกที่ URL จากหน้า Environment ของเรา

[environment-name].ap-southeast-1.elasticbeanstalk.com

เมื่อแสดงหน้าจอแบบนี้แล้ว เริ่มทำการตรวจสอบได้เลย

ทำการตรวจสอบหน้า form โดยพิมพ์/form.phpต่อท้าย URL Environment แบบนี้
จากนั้นทำการทดสอบอัปโหลดไฟล์ที่มีขนาดไม่เกิน 30M ตัวอย่างนี้จะใช้ไฟล์ขนาด25,735KB

http://[environment_name].ap-southeast-1.elasticbeanstalk.com/form.php

เมื่อแสดงหน้าจอแบบนี้ ก็ถือว่าเสร็จเรียบร้อยแล้วครับ

สรุป

การใช้งานเว็บไซต์เกี่ยวกับการอัปโหลดไฟล์ใน Elastic Beanstalk เราสามารถตั้งค่าให้อัปโหลดไฟล์ตามขนาดที่ต้องการได้ด้วยวิธีเหล่านี้ นอกจากนี้ต้องระวังเรื่องการสร้างโฟล์เดอร์และไฟล์ให้ดี เพราะว่าถ้าตั้งชื่อโฟลเดอร์หรือไฟล์ผิดก็จะทำให้เกิดข้อผิดพลาดได้ครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

Link อ้างอิง