PHP Upload v2

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();

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

คุณอาจใช้แท็กHTMLและแอททริบิวต์เหล่านี้: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>