คู่มือการใช้งาน CodeIgniter เวอร์ชั่น 1.7.2


File Uploading Class

คลาสอัพโหลดไฟล์ของ CodeIgniter ยอมให้คุณอัพโหลดไฟล์ , ปรับแต่งค่าได้หลากหลาย , จำกัดประเภทและขนาดไฟล์ได้

แนวทางการใช้งาน

การอัพโหลดไฟล์โดยทั่วไปนั้นจะต้องทำตามขั้นตอนดังนี้

ในสาธิตขั้นตอนการทำงานนี้นี้คือวิธีการสอนใช้แบบคร่าวๆ และหลังจากนั้นคุณจะเจอข้อมูลเอกสารอ้างอิงเพิ่มเติม

สร้างฟอร์มอัพโหลด

ใช้โปรแกรมจัดการข้อความ(text editor) สร้างไฟล์ที่ชื่อว่า upload_form.php ภายในไฟล์ให้ใส่โค้ดดังนี้ บันทึกแล้วนำมันไปวางไว้ที่โฟลเดอร์ applications/views/

คุณจะสังเกตุได้ว่าเราได้ใช้ผู้ช่วยฟอร์ม(Form Helper) เพื่อสร้างแท็กเปิด โดยการอัพโหลดไฟล์นั้นต้องการฟอร์มที่รองรับหลายส่วน(multipart form) ดังนั้นเราจะใช้ผู้ช่วยสร้างมันขึ้นมาโดยใช้ไวยากรณ์(syntax) ที่เหมาะสมกับคุณ คุณจะสังเกตุได้ว่าเรามีตัวแปร $error ด้วย สิ่งนี้จะช่วยเราให้โชว์ข้อความ ข้อผิดพลาดในกรณีที่ผู้ใช้งานทำบางสิ่งบางอย่างผิด

หน้าที่แสดงเมื่ออัพโหลดไฟล์สำเร็จ

ใช้โปรแกรมจัดการข้อความสร้างไฟล์ที่ชื่อว่า upload_success.php ภายในไฟล์ให้ใส่โค้ดดังนี้ บันทึกแล้วนำมันไปวางไว้ที่โฟลเดอร์ applications/views/

ตัวควบคุมการอัพโหลด

ใช้โปรแกรมจัดการข้อความสร้างไฟล์ที่ชื่อว่า upload.php ภายในไฟล์ให้ใส่โค้ดดังนี้ บันทึกแล้วนำมันไปวางไว้ที่โฟลเดอร์ applications/controllers/

โฟลเดอร์อัพโหลด

คุณต้องการตำแหน่งโฟลเดอร์ที่คุณจะอัพโหลดรูปของคุณ สร้างโฟลเดอร์ที่ไดเรคทอรี่แรกสุดของการติดตั้ง CodeIgniter (root) โดยตั้งชื่อว่า uploads และตั้งค่ายินยอมเป็น 777

ทดลองใช้มัน!

วิธีการทดลองกับฟอร์มของคุณนั้น ให้เข้าเว็บไซต์ของคุณโดย URL จะคล้ายตัวอย่างนี้ ข้อสังเกตุ example.com นั้นเป็นชื่อที่ๆคุณติดตั้ง อาจจะเป็น localhost หรือเว็บไซต์ก็ได้

example.com/index.php/upload/

เมื่อเข้าไปคุณควรจะเห็นฟอร์มอัพโหลด และลองอัพโหลดไฟล์รูปภาพ (เช่น jpg, gif, หรือ png) ถ้าตำแหน่งอัพโหลดในตัวควบคุมของคุณถูกมันควรจะทำงาน

แนะนำเอกสารอ้างอิง

เริ่มต้นใช้คลาสอัพโหลด

เหมือนคลาสอื่นๆใน CodeIgniter คลาสอัพโหลดถูกเริ่มต้นใช้งานได้ในตัวควบคุมโดยใช้ฟังก์ชัน $this->load->library

$this->load->library('upload');

เมื่อคลาสอัพโหลดถูกโหลดขึ้นมาแล้ว เราสามารถใช้งานมันได้ด้วยแบบนี้ $this->upload

ปรับแต่งค่าตามความต้องการ

เหมือนกับไลบรารี่ตัวอื่นๆ คุณจะควบคุมว่าอะไรที่จะถูกยินยอมในการอัพโหลดผ่านการปรับแต่งตามความต้องการคุณนั้น ซึ่งในตัวควบคุมที่คุณสร้างขึ้นก่อนหน้านี้(ตัวข้างบน) คุณได้ตั้งค่าเริ่มต้นไว้แบบนี้

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

$this->load->library('upload', $config);

// หรืออีกทางหนึ่งคุณสามารถตั้งค่าปรับแต่งนั้นโดยการใช้ฟังก์ชัน initialize แทนก็ได้ซึ่งเป็นประโยชน์มากถ้าคุณใช้การโหลดแบบอัพโนมัติแล้วจะเปลี่ยนค่า
$this->upload->initialize($config);

ค่าปรับแต่งด้านบนนั้นจะถูกอธิบายอย่างดีตามตารางค่าปรับแต่งด้านล่างนี้

ค่าปรับแต่ง

ค่าปรับแต่งต่อไปนี้คือสิ่งที่คุณสามารถปรับแต่งได้ โดยค่าทั่วไปนั้นจะถูกใช้เมื่อคุณไม่มีการปรับแต่งเจ้าค่าปรับแต่งตัวนั้น

Preference Default Value Options Description
upload_path None None ตำแหน่งของโฟลเดอร์ที่ไฟล์อัพโหลดจะนำไปวางไว้ โดยโฟลเดอร์นั้นจะต้องเขียนได้และตำแหน่งจะเป็นแบบความสัมพันธ์หรือเต็มก็ได้
allowed_types None None ประเภท mime เหมือนกันกับประเภทของไฟล์ที่คุณยอมให้อัพโหลด โดยทั่วไปประเภทของไฟล์นั้นสามารถถูกใช้แทนประเภทของ mime ได้ แล้วแบ่งหลายประเภทจากการใช้ pipe (|)
file_name None ชื่อไฟล์ที่ต้องการ

ถ้ามีการตั้งค่า CodeIgniter จะเปลี่ยนชื่อไฟล์ที่ถูกอัพโหลดเป็นชื่อนี้

ข้อสังเกตุ:ชื่อไฟล์นั้นไม่ควรจะใส่ประเภทของไฟล์ เช่น test.mp4

overwrite FALSE TRUE/FALSE (boolean) ถ้าตั้งค่าเป็น TRUE ถ้าไฟล์มีชื่อเดียวกับไฟล์ที่คุณกำลังอัพโหลดขึ้นมา มันจะเขียนทับให้ ถ้าคุณตั้งค่าเป็น FALSE จะมีตัวเลขต่อท้ายชื่อไฟล์ที่อัพโหลดขึ้นมานั้นแทนในกรณีที่มันซ้ำเท่านั้น
max_size 0 None ขนาดไฟล์สูงสุดที่จะอัพโหลดได้ (ใช้หน่วยเป็น kilobyte) ตั้งค่าเป็นศูนย์สำหรับไม่จำกัดขนาด ข้อสังเกตุ: การติดตั้ง PHP นั้นมีการจำกัดค่าไว้อยู่แล้วซึ่งตั้งอยู่ในไฟล์ php.ini โดยทั่วไปแล้วคือ 2 MB (หรือ 2048 KB)
max_width 0 None ขนาดความกว้างสูงสุด(หน่วยเป็น pixels) ที่ไฟล์นั้นจะเป็นได้ ถ้าตั้งค่าเป็นศูนย์คือไม่จำกัด
max_height 0 None ขนาดความสูงสูงสุด(หน่วยเป็น pixels) ที่ไฟล์นั้นจะเป็นได้ ถ้าตั้งค่าเป็นศูนย์คือไม่จำกัด
max_filename 0 None ความยาวของชื่อไฟล์ที่สามารถถูกตั้งได้ ตั้งค่าเป็นศูนย์คือไม่จำกัด
encrypt_name FALSE TRUE/FALSE (boolean) ถ้าตั้งค่าเป็น TRUE ชื่อไฟล์นั้นจะถูกแปลงเป็นสตริงที่ถูกเข้ารหัสแบบสุ่ม สิ่งนี้จะเป็นประโยชน์ถ้าคุณต้องการบันทึกไฟล์ด้วยชื่อที่ไม่สามารถทำให้แยกแยะได้ ด้วยคนที่อัพโหลดมัน
remove_spaces TRUE TRUE/FALSE (boolean) ถ้าตั้งค่าเป็น TRUE ที่ว่างที่อยู่ในชื่อไฟล์นั้นจะถูกเปลี่ยนเป็น underscore(_) แทนซึ่งสิ่งนี้เป็นสิ่งที่แนะนำเป็นอย่างมาก

ตั้งค่าในไฟล์ปรับแต่ง

ถ้าคุณชอบที่จะไม่ตั้งค่าปรับแต่งในรูปแบบด้านบน คุณสามารถนำไปใส่ในไฟล์ปรับแต่งแทนได้ โดยการสร้างไฟล์ที่มีชื่อว่า upload.php เพิ่มอาเรย์ $config ลงไปในไฟล์หลังจากนั้นบันทึกไฟล์ config/upload.php และมันจะถูกใช้อย่างอัตโนมัติ คุณจึงไม่จำเป็นที่จะต้องใช้ฟังก์ชัน $this->upload->initialize ถ้าคุณบันทึกการปรับแต่งของคุณไว้ในไฟล์แล้ว

เอกสารอ้างอิงฟังก์ชัน

ฟังชั่นที่มีให้ใช้งานดังต่อไปนี้

$this->upload->do_upload()

ปฎิบัติหน้าที่อัพโหลดโดยขึ้นอยู่กับค่าปรับแต่งที่คุณตั้ง ข้อสังเกตุ: โดยทั่วไปการอัพโหลดด้วยฟังก์ชันนี้คาดหวังว่าไฟล์จะมาจากฟอร์มฟิลด์ที่เรียกว่า userfile และฟอร์มจะต้องถูกตั้งค่าเป็นแบบหลายส่วน (multipart)

<form method="post" action="some_action" enctype="multipart/form-data" />

ถ้าคุณชอบที่จะตั้งชื่อฟิลด์ของตัวเอง คุณสามารถส่งชื่อฟิลด์นั้นไปผ่านฟังก์ชัน do_upload ได้เหมือนกัน

$field_name = "some_field_name";
$this->upload->do_upload($field_name)

$this->upload->display_errors()

คืนค่ามาเป็นข้อความผิดพลาดต่างๆถ้าฟังก์ชัน do_upload() คืนค่าเป็นเท็จ(false) ฟังก์ชันจะไม่ echo อย่างอัตโนมัติ มันจะคืนค่าเป็นข้อมูลดังนั้นคุณสามารถจัดการได้ตามที่คุณต้องการ

จัดรูปแบบข้อความข้อผิดพลาด

โดยปกติฟังก์ชันนี้จะถูกคลอบด้วยแท็กแต่ละข้อผิดพลาดด้วย <p> ซึ่งคุณสามารถตั้งเป็นค่าอื่นได้ตามคุณต้องการ โดยมีลักษณะดังนี้

$this->upload->display_errors('<p>', '</p>');

$this->upload->data()

นี้คือฟังก์ชันช่วยเหลือที่คืนค่าอาเรย์โดยมีข้อมูลต่างๆของไฟล์ที่ถูกอัพโหลดสมบูรณ์แล้ว และนี้คือตัวอย่างอาเรย์

Array
(
    [file_name]    => mypic.jpg
    [file_type]    => image/jpeg
    [file_path]    => /path/to/your/upload/
    [full_path]    => /path/to/your/upload/jpg.jpg
    [raw_name]     => mypic
    [orig_name]    => mypic.jpg
    [file_ext]     => .jpg
    [file_size]    => 22.2
    [is_image]     => 1
    [image_width]  => 800
    [image_height] => 600
    [image_type]   => jpeg
    [image_size_str] => width="800" height="200"
)

คำอธิบาย

นี้คือคำธิบายอาเรย์ด้านบนทั้งหมด

ItemDescription
file_name ชื่อไฟล์ที่ไฟล์นั้นถูกอัพโหลดโดยมีประเภทของไฟล์นั้นรวมอยู่ด้วย
file_type ประเภท mime ของไฟล์
file_path ตำแหน่งไฟล์แท้จริงของเซิร์ฟเวอร์ (ไม่มีชื่อไฟล์)
full_path ตำแหน่งไฟล์แท้จริงของเซิร์ฟเวอร์ร่วมทั้งชื่อไฟล์
raw_name ชื่อไฟล์โดยไม่รวมประเภทของไฟล์
orig_name ไฟล์ชื่อเดิม สิ่งนี้จะเป็นประโยชน์ถ้าคุณใช้ทางเลือกการเข้ารหัสชื่อ
file_ext ประเภทไฟล์พร้อมกับจุด
file_size ขนาดไฟล์ในหน่วย kilobyte
is_image เป็นไฟล์รูปหรือไม่ 1 = ไฟล์รูป 0 = ไม่ใช่ไฟล์รูป
image_width ความกว้างของรูป
image_heigth ความสูงของรูป
image_type ประเภทของรูปโดยเป็นประเภทไฟลโดยไม่มีจุด
image_size_str สตริงที่มีทั้งความกว้างและความสูง เหมาะสำหรับจะนำไปใส่ในแท็ก image (ตัวอย่างสตริงคือ "width=100 height=100")