POST method uploads

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

PHP สามารถรับไฟล์อัพโหลดจากเบราว์เซอร์ที่รองรับ RFC-1867

PHP ยังสนับสนุนการอัพโหลดไฟล์ PUT-method ตามที่ผู้ใช้ Netscape Composer และ ผู้ใช้งานของ Amaya W3C ดูวิธีการสนับสนุน PUT สำหรับรายละเอียดเพิ่มเติม

ตัวอย่างที่ 1 แบบฟอร์มการอัปโหลดไฟล์
หน้าจออัปโหลดไฟล์สามารถสร้างขึ้นได้ด้วยการสร้างฟอร์มพิเศษซึ่งมีลักษณะดังนี้:

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

ควรแทนที่ __URL__ ในตัวอย่างข้างต้นและชี้ไปที่ไฟล์ PHP

เขตข้อมูลที่ซ่อนไว้ MAX_FILE_SIZE (หน่วยวัดเป็นไบต์) ต้องนำหน้าฟิลด์ป้อนข้อมูลของไฟล์และค่าของไฟล์เป็นขนาดไฟล์สูงสุดที่ยอมรับโดย PHP อิลิเมนต์ฟอร์มนี้ควรใช้เสมอเนื่องจากจะช่วยให้ผู้ใช้ประหยัดเวลาในการรอไฟล์ขนาดใหญ่ที่ถ่ายโอนเพื่อดูว่ามีขนาดใหญ่เกินไปและการโอนล้มเหลว โปรดทราบว่าการหลอกลวงการตั้งค่านี้ในฝั่งเบราเซอร์ค่อนข้างง่ายดังนั้นอย่าพึ่งพาไฟล์ที่มีขนาดใหญ่กว่าที่ถูกบล็อกโดยคุณลักษณะนี้ เป็นเพียงคุณลักษณะความสะดวกสบายสำหรับผู้ใช้ในฝั่งไคลเอ็นต์ของแอ็พพลิเคชัน การตั้งค่า PHP (ด้านเซิร์ฟเวอร์) สำหรับขนาดสูงสุดไม่สามารถหลอกได้

บันทึก:
ตรวจสอบว่าไฟล์อัปโหลดของคุณมีแอตทริบิวต์ enctype = “multipart / form-data” มิฉะนั้นการอัปโหลดไฟล์จะไม่ทำงาน

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

$ _FILES [‘userfile’] [‘name’]
ชื่อเดิมของไฟล์บนเครื่องไคลเอ็นต์

$ _FILES [‘userfile’] [‘type’]
ไฟล์ mime ของไฟล์หากเบราเซอร์ระบุข้อมูลนี้ ตัวอย่างเช่น “image / gif” ประเภท mime นี้ไม่ได้รับการตรวจสอบด้าน PHP และดังนั้นจึงไม่ใช้ค่าสำหรับการรับ

$ _FILES [‘userfile’] [‘size’]
ขนาดเป็นไบต์ของไฟล์ที่อัปโหลด

$ _FILES [‘userfile’] [‘tmp_name’]
ชื่อไฟล์ชั่วคราวของไฟล์ซึ่งไฟล์ที่อัปโหลดถูกเก็บไว้บนเซิร์ฟเวอร์

$ _FILES [‘userfile’] [‘error’]
รหัสข้อผิดพลาดที่เชื่อมโยงกับไฟล์นี้จะอัปโหลด

ไฟล์จะถูกจัดเก็บไว้ในไดเร็กทอรีชั่วคราวของเซิร์ฟเวอร์เริ่มต้นเว้นเสียแต่ว่าจะมีการระบุตำแหน่งที่ตั้งอื่นด้วย directive upload_tmp_dir ใน php.ini ไดเร็กทอรีเริ่มต้นของเซิร์ฟเวอร์สามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม TMPDIR ในสภาพแวดล้อมที่ PHP รัน การตั้งค่าโดยใช้ putenv () จากภายในสคริปต์ PHP จะไม่ทำงาน ตัวแปรสภาพแวดล้อมนี้สามารถใช้เพื่อให้แน่ใจว่าการดำเนินงานอื่น ๆ กำลังทำงานกับไฟล์ที่อัปโหลดเช่นกัน

ตัวอย่างที่ 2 ตรวจสอบการอัปโหลดไฟล์
ดูข้อมูลเพิ่มเติมเกี่ยวกับรายการฟังก์ชันสำหรับ is_uploaded_file () และ move_uploaded_file () สำหรับข้อมูลเพิ่มเติม ตัวอย่างต่อไปนี้จะประมวลผลการอัปโหลดไฟล์ที่มาจากฟอร์ม

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>

สคริปต์ PHP ที่รับไฟล์ที่อัปโหลดควรใช้ตรรกะใด ๆ ที่จำเป็นสำหรับการพิจารณาว่าควรทำอย่างไรกับไฟล์ที่อัปโหลด คุณสามารถใช้ตัวแปร $ _FILES [‘userfile’] [‘size’] เพื่อโยนไฟล์ใด ๆ ที่เล็กเกินไปหรือใหญ่เกินไป คุณสามารถใช้ตัวแปร $ _FILES [‘userfile’] [‘type’] เพื่อโยนไฟล์ที่ไม่ตรงกับเกณฑ์ประเภทบางชนิด แต่ให้ใช้เฉพาะชุดตรวจสอบชุดแรกเท่านั้นเนื่องจากค่านี้อยู่ภายใต้ การควบคุมของลูกค้าและไม่ได้ตรวจสอบในด้าน PHP นอกจากนี้คุณสามารถใช้ $ _FILES [‘userfile’] [‘error’] และวางแผนตรรกะของคุณตามรหัสข้อผิดพลาด ไม่ว่าเหตุผลใดคุณควรลบไฟล์ออกจากไดเร็กทอรีชั่วคราวหรือย้ายไปที่อื่น

ถ้าไม่มีไฟล์ใดถูกเลือกสำหรับอัปโหลดในแบบฟอร์มของคุณ PHP จะคืน $ _FILES [‘userfile’] [‘size’] เป็น 0 และ $ _FILES [‘userfile’] [‘tmp_name’] ว่าไม่มีไฟล์จะถูกลบออกจากไดเร็กทอรีชั่วคราวเมื่อสิ้นสุดการร้องขอหากยังไม่ได้ย้ายออกไปหรือเปลี่ยนชื่อ

ตัวอย่างที่ 3 การอัปโหลดอาร์เรย์ของไฟล์
PHP สนับสนุนคุณลักษณะอาร์เรย์ HTML แม้จะมีไฟล์

<form action="" method="post" enctype="multipart/form-data">
<p>Pictures:
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="file" name="pictures[]" />
<input type="submit" value="Send" />
</p>
</form>

<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        // basename() may prevent filesystem traversal attacks;
        // further validation/sanitation of the filename may be appropriate
        $name = basename($_FILES["pictures"]["name"][$key]);
        move_uploaded_file($tmp_name, "data/$name");
    }
}
?>

ที่มา: http://php.net/manual/en/features.file-upload.post-method.php

ความคิดเห็น
(มีผู้เข้าชม 219 ครั้ง, 1 ผู้เข้าชมในวันนี้)

Related posts