PHP upload class ที่รองรับการอัพโหลดทั้งแบบไฟล์เดี่ยวและหลายไฟล์พร้อมๆกัน. มันสามารถตรวจสอบสิ่งต่างๆได้หลายอย่าง เช่น นามสกุลไฟล์ที่อนุญาต, ประเภทไฟล์และนามสกุลที่ต้องตรงกัน (mime type), ขนาดไฟล์สูงสุด, สแกนหาโค้ด PHP, Perl ที่ฝังตัวอยู่, ป้องกันการกำหนดชื่อหรือมีอักขระที่หวงห้ามใน OS ต่างๆ, อนุญาตเฉพาะอักขระที่ปลอดภัยสำหรับเว็บ (ภาษาอังกฤษ, ตัวเลข, -, _).
ดาวน์โหลด หรือติดตั้งผ่าน Composer
อ้างอิงเอกสาร API
License: MIT
การใช้งาน
หากคุณไม่ได้ติดตั้งผ่าน Composer คุณต้องทำการ include, require ไฟล์ต่อไปนี้ในหน้าที่จะทำการเรียกใช้ class Upload() ทุกครั้ง.
require_once __DIR__.DIRECTORY_SEPARATOR.'Rundiz'.DIRECTORY_SEPARATOR.'Upload'.DIRECTORY_SEPARATOR.'Upload.php';
สร้างฟอร์ม upload
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test file upload.</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="file" name="filename[]" multiple>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
<!--
If you want to upload single file, use this input form
<input type="file" name="filename">
-->
</body>
</html>
ไฟล์ upload.php ที่รับค่าจากฟอร์ม
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
$Upload = new \Rundiz\Upload\Upload('filename');
$Upload->move_uploaded_to = '/path/to/your/uploaded-files';
// อนุญาตไฟล์ gif, jpg, png
$Upload->allowed_file_extensions = array('gif', 'jpg', 'jpeg', 'png');
// ขนาดไฟล์สูงสุดคือ 900KB.
$Upload->max_file_size = 900000;
// คุณสามารถตั้งชื่อไฟล์ที่อัพโหลดใหม่ได้หรือปล่อยว่างไว้เพื่อใช้ชื่อเดิม. กำหนดชื่อเท่านั้น ไม่รวมนามสกุลไฟล์.
$Upload->new_file_name = 'new-uploaded-name';
// เขียนไฟล์ทับของเก่าหรือไม่?
$Upload->overwrite = false;
// ชื่อที่ปลอดภัยสำหรับเว็บคือภาษาอังกฤษ, ตัวเลข, ขีดกลาง (-), ขีดล่าง (_).
$Upload->web_safe_file_name = true;
// สแกนหาโค้ด PHP, Perl ที่ฝังอยู่?
$Upload->security_scan = true;
// ถ้าอัพโหลดหลายไฟล์ คุณจะให้หยุดเมื่อพบไฟล์ที่มีข้อผิดพลาดหรือไม่? (กำหนดเป็น false เพื่อข้ามไฟล์ที่มี error).
$Upload->stop_on_failed_upload_multiple = false;
// เริ่มการอัพโหลด
$upload_result = $Upload->upload();
// รับค่าต่างๆของไฟล์ที่อัพโหลดผ่าน.
$uploaded_data = $Upload->getUploadedData();
if ($upload_result === true) {
echo '<p>Upload successfully.</p>';
}
if (is_array($uploaded_data) && !empty($uploaded_data)) {
echo '<pre>'.htmlspecialchars(stripslashes(var_export($uploaded_data, true))).'</pre>;
}
// ตรวจหาและแสดง error ทั้งหมด.
if (is_array($Upload->error_messages) && !empty($Upload->error_messages)) {
echo '<h3>Error!</h3>';
foreach ($Upload->error_messages as $error_message) {
echo '<p>'.$error_message.'</p>'."\n";
}// endforeach;
}
// เพิ่มเติมใน v2.0.1 สามารถเรียกใช้ property error_codes มาแสดงข้อความ error แบบกำหนดเองได้
if (is_array($Upload->error_codes) && !empty($Upload->error_codes)) {
foreach ($Upload->error_codes as $errIndex => $errItem) {
if (isset($errItem['code'])) {
switch ($errItem['code']) {
case 'RDU_1':
echo 'ขนาดไฟล์เกินกว่าที่กำหนดไว้';
break;
case 'RDU_xxx':
// โปรดดูเพิ่มเติมใน property error_codes จะแสดงรายละเอียดและคำอธิบายเอาไว้.
break;
}// endswitch;
}
}// endforeach;
}
}
ตัวอย่างของรูปแบบ array ที่ได้จาก getUploadedData()
.
array (
0 =>
array (
'name' => '2016-01-23_00001.jpg',
'extension' => 'jpg',
'size' => 599923,
'new_name' => '2016-01-23_00001.jpg',
'full_path_new_name' => '/path/to/your/uploaded-files/2016-01-23_00001.jpg',
'mime' => 'image/jpeg',
'md5_file' => 'c18b22a64cc71e1b1dfc930009e5f970',
),
1 =>
array (
'name' => '2016-01-24_00001.jpg',
'extension' => 'jpg',
'size' => 260488,
'new_name' => '2016-01-24_00001.jpg',
'full_path_new_name' => '/path/to/your/uploaded-files/2016-01-24_00001.jpg',
'mime' => 'image/jpeg',
'md5_file' => 'a1b2ac1f19949d22ad02c37545d5285f',
),
)
ตารางอ้างอิงค่า property & method
Name | Description | Example |
---|---|---|
Properties | ||
allowed_file_extensions | นามสกุลไฟล์ที่อนุญาต. กำหนดเป็น array เท่านั้น. | $Upload->allowed_file_extensions = array('jpg', 'txt'); |
file_extensions_mime_types | ประเภทไฟล์สำหรับนามสกุลไฟล์ทั้งหมด. หากไม่กำหนดจะใช้ของที่มีมาให้กับโค้ดชุดนี้. สามารถกำหนดเพิ่มเติมได้เป็นรูปแบบดังตัวอย่าง. ทั้งนี้การกำหนดค่าตรงนี้จะเป็นการแทนที่ของเดิมที่มีมากับโค้ดชุดนี้. กำหนดเป็น array เท่านั้น. |
$Upload->file_extensions_mime_types = array( 'jpg' => array('image/jpeg', 'image/pjpeg'), 'txt' => array('text/plain'), ); |
max_file_size | ขนาดไฟล์สูงสุดที่อนุญาต. ขนาดเป็นไบต์เท่านั้น. | $Upload->max_file_size = 900000; |
new_file_name | ตั้งชื่อไฟล์ที่อัพโหลดใหม่โดยไม่ต้องกำหนดนามสกุลไฟล์. ค่านี้ไม่แนะนำให้กำหนดหากทำการอัพโหลดครั้งละหลายๆไฟล์. หากคุณกำหนดค่านี้ในขณะที่อัพโหลดครั้งละหลายไฟล์ แนะนำให้กำหนดค่า overwrite เป็น false มิฉะนั้นมันจะทำการย้ายไฟล์ที่อัพโหลดทั้งหมดไปเป็นไฟล์ชื่อเดียวกัน. | $Upload->new_file_name = 'my new upload file name'; |
overwrite | ย้ายไฟล์ที่อัพโหลดทับไฟล์ที่มีอยู่แล้วหรือไม่? ถ้าไม่ให้ทับ ระบบจะกำหนดชื่อให้ใหม่โดยเติมตัวเลขต่อท้ายให้. กำหนดเป็น boolean เท่านั้น. |
$Upload->overwrite = false; |
web_safe_file_name | ชื่อที่ปลอดภัยสำหรับเรียกดูบนเว็บ อักขระต้องเป็นหนึ่งในนี้ ภาษาอังกฤษ, ตัวเลข, ขีดกลาง (-), ขีดล่าง (_) กำหนดเป็น boolean เท่านั้น. |
$Upload->web_safe_file_name = true; |
security_scan | สแกนหาโค้ด PHP, Perl ที่ฝังตัวอยู่? กำหนดเป็น boolean เท่านั้น. |
$Upload->security_scan = true; |
stop_on_failed_upload_multiple | เมื่ออัพโหลดครั้งละหลายไฟล์ ให้หยุดทันทีเมื่อพบไฟล์ใดไฟล์หนึ่งที่ติดขัดข้อจำกัดที่ระบุไว้หรือไม่? ถ้ากำหนดเป็น false มันจะข้ามไฟล์ที่ผิดพลาดติดข้อจำกัด, ถ้ากำหนดเป็น true จะหยุดทันทีและทุกไฟล์ต้องผ่านหมดเสียก่อน. กำหนดเป็น boolean เท่านั้น. |
$Upload->stop_on_failed_upload_multiple = false; |
move_uploaded_to | ย้ายไฟล์ที่อัพโหลดแล้วไปยังตำแหน่งนี้. กำหนด path โดยไม่ต้องมีเครื่องหมาย / ต่อท้าย. | $Upload->move_uploaded_to = '/path/to/uploaded'; |
error_codes | สำหรับเรียกดูว่าพบข้อผิดพลาดหรือไม่ เหมือนกับ property error_messages แต่สามารถเช็คค่า array key ที่ชื่อ code เพื่อนำไปใส่เงื่อนไขใช้ข้อความที่กำหนดเองได้ | โปรดดูตัวอย่างจากโค้ดด้านบน. |
error_messages | สำหรับเรียกดูว่าพบข้อผิดพลาดหรือติดข้อจำกัดใดๆหรือไม่. ค่าที่ได้จาก property นี้เป็น array ให้ทำการวน foreach เพื่อแสดง. | if (is_array($Upload->error_messages) && !empty($Upload->error_messages) { foreach ($Upload->error_messages as $error) { echo $error.'<br>'; } } |
Methods | ||
__construct($input_file_name) | เมธอดเริ่มต้นของ class. เมื่อเริ่ม class ให้กำหนดชื่อของ input file ด้วย. | $Upload = new \Rundiz\Upload\Upload('filename'); |
clear() | ล้างค่าทั้งหมดและเริ่มต้นใหม่. เมื่อเรียกใช้ clear() และจะเริ่มต้นใหม่ คุณไม่ต้องเริ่ม class ใหม่แต่ให้เรียก setInputFileName() ได้เลย | $Upload->clear(); |
getUploadedData() | เรียกดูค่าของไฟล์ต่างๆที่อัพโหลดและย้ายสำเร็จ. ผลลัพธ์ที่ได้จะเป็น array ดังตัวอย่างด้านบน. | $Upload->getUploadedData(); |
setInputFileName($input_file_name) | มีค่าเท่ากันกับเมธอดเริ่มต้นของ class. ต้องเรียกใช้งานก็ต่อเมื่อทำการเรียกค่า clear() ไปแล้ว. | $Upload->clear(); $Upload->setInputFileName('filename'); |
testGetUploadedMimetype($input_file_name) | แสดงค่าประเภทไฟล์ของไฟล์ที่อัพโหลด. method นี้จะมีประโยชน์เมื่อคุณต้องการเพิ่ม mime type สำหรับตรวจสอบใน property file_extensions_mime_types. | $Upload->testGetUploadedMimetype(); |
upload() | สั่งให้ดำเนินการตรวจสอบสิ่งที่กำหนดไว้ใน property และทำการย้ายไฟล์ที่อัพโหลดแล้ว. เมื่อดำเนินการสำเร็จจะได้ค่าเป็น true หากไม่สำเร็จจะได้ค่าเป็น false. ทั้งนี้ให้ตรวจสอบข้อผิดพลาดกับ property error_messages เสมอ. | $Upload->upload(); |