คอมพิวเตอร์, ประเภทไฟล์
ไฟล์ที่อัปโหลดไปยังเซิร์ฟเวอร์: PHP
การดาวน์โหลดไฟล์ผ่าน PHP - กรณีที่น่าสนใจมากที่จะต้องเข้าหาอย่างระมัดระวัง บนอินเทอร์เน็ตที่คุณสามารถหาตัวอย่างมากมายของการดำเนินงานของการอัปโหลดไฟล์ แต่ไม่ทั้งหมดของพวกเขาเป็นสิ่งที่ดีและตอบสนองกฎระเบียบความปลอดภัย
สิ่งดังกล่าวต้องนำไปสู่ข้อสรุปถึงแม้ว่ามันจะใช้เวลานาน ถ้าคุณปล่อยให้ช่องว่างในรหัสนั้นเซิร์ฟเวอร์ทั้งหมดของคุณสามารถทำลาย
ความปลอดภัย
ด้วย PHP อัปโหลดไฟล์ ไปยังเซิร์ฟเวอร์ที่มีการดำเนินการค่อนข้างง่าย รหัสเป็นอย่างมากที่สั้นและง่าย เพียงไม่กี่บรรทัด แต่วิธีนี้เป็นอันตราย เวลามากขึ้นและบรรทัดของรหัสที่อยู่ห่างออกไปเพื่อความปลอดภัย
อันตรายคือว่าถ้าคุณไม่ได้ทำการตรวจสอบการโจมตีใด ๆ ที่อาจอัปโหลดสคริปต์ของพวกเขาบนเซิร์ฟเวอร์ของคุณ ในกรณีนี้ก็จะมีการเข้าถึงแบบเต็ม เขาสามารถทำสิ่งที่เขาต้องการ:
- ลบฐานข้อมูล;
- ลบเว็บไซต์ไฟล์;
- ปรับเปลี่ยนเว็บไซต์ไฟล์;
- เพิ่มโฆษณาของคุณไปยังเว็บไซต์ของคุณ
- ดาวน์โหลดไวรัส
- เปลี่ยนเส้นทางผู้ใช้ทั้งหมดบนเว็บไซต์ของพวกเขา;
- และสิ่งอื่น ๆ ที่มาใจโจมตี
คุณควรตรวจสอบที่พยายามที่จะดาวน์โหลดไฟล์สำหรับผู้ใช้ ตัวอย่างเช่นถ้าคุณอัปโหลดภาพเท่านั้นก็เป็นสิ่งจำเป็นในการตรวจสอบว่าไฟล์ภาพได้อย่างถูกต้อง มิฉะนั้นคุณจะดาวน์โหลดอะไร
ว่าวิธีการที่จะดำเนินการตรวจสอบก็จะแสดงด้วยสคริปต์การตรวจสอบโดยตรงสามารถอัปโหลดไฟล์
การสร้างแบบฟอร์ม PHP ได้หรือ
รูปแบบการอัปโหลดไฟล์เป็นเรื่องง่ายมาก ที่ขาดหายไปปุ่มและอัพโหลดดูปุ่ม
อธิบายวิธีการสร้างรูปแบบจะไม่เพราะมันเป็นเรื่องง่าย คำแนะนำเพิ่มเติมสมมติว่าคุณมีแนวคิดพื้นฐานของ HTML (มิฉะนั้นคุณจะไม่ได้มองหาข้อมูลเกี่ยวกับการดาวน์โหลดบน PHP)
แต่ทราบว่าข้อมูลในรูปแบบที่คุณต้องเพิ่มแอตทริบิวต์ enctype
มิฉะนั้นข้อมูลเกี่ยวกับไฟล์จัดการจะไม่ถูกส่ง
ว่ามันควรจะทำงานอย่างไร
หลังจากนั้นก็จะต้องได้รับเส้นทางที่ไฟล์นั้นตั้งอยู่
ถ้าเส้นทางไม่ปรากฏให้ดำเนินการอีกครั้ง
หลังจากคลิกที่ตัวจัดการไฟล์ดาวน์โหลดสามารถให้ข้อมูลใด ๆ
ตัวอย่างเช่นคุณสามารถเขียนเส้นที่ระบุว่าไฟล์เป็น "ดังนั้นจึง" ชื่อที่ได้รับการอัปโหลดที่ประสบความสำเร็จกับ "ดังกล่าวและเช่นโฟลเดอร์" แน่นอนว่าชื่อไฟล์จะได้รับแตกต่างกันเสมอ
โดยปกติแล้วข้อมูลนี้จะถูกนำมาใช้เพื่อแก้ปัญหารหัส ดังนั้นมันจึงเป็นไปได้ที่จะตรวจสอบว่าข้อมูลจะถูกส่งและเขียนเกิดขึ้นในไดเรกทอรีที่ต้องการ นั่นคือแม้ชื่อไฟล์ไม่ได้ระบุ เนื่องจากข้อมูลนี้พิเศษที่ผู้ใช้ไม่จำเป็นต้อง
มันทำให้รู้สึกถึงการส่งออกชื่อเฉพาะในกรณีที่ผู้ใช้ดาวน์โหลดไฟล์หลายไฟล์ ดังกล่าวเป็นกรณีที่พิจารณาเพียงเล็กน้อยต่อไป ให้ไม่ได้รับล่วงหน้าของตัวเอง
การปรับ
ใน PHP อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ต้องมีการตั้งค่าบางอย่างที่ควรจะทำในไฟล์ php.ini ไฟล์นี้มีจำนวนมากของการตั้งค่า พวกเขาทุกคนเราไม่จำเป็นต้อง เรามีความสนใจในสามบรรทัด: หน้าที่มี, upload_tmp_dir และ upload_max_filesize
โปรดทราบว่าการตั้งค่าเหล่านี้จะส่งผลกระทบต่อทั้งหมดของเว็บไซต์ของคุณบนเซิร์ฟเวอร์ที่ไม่เพียงคนใดคนหนึ่ง ดังนั้นการตั้งค่าขนาดสูงสุดขึ้นอยู่กับความจริงที่ว่าคุณจะต้องโหลดผู้ใช้ มันจะไม่แนะนำให้ตั้งขนาดใหญ่เกินไป
เมื่อคุณเปลี่ยนค่าพารามิเตอร์เหล่านี้คุณจะต้องเริ่มต้นเซิร์ฟเวอร์ มิฉะนั้นการตั้งค่าจะไม่มีผลเช่นที่พวกเขาอ่านในช่วงเวลาของการโหลดเซิร์ฟเวอร์
คุณสามารถทำเช่นนี้ในคอนโซลโดยการเชื่อมต่อผ่าน SSH ไปยังเซิร์ฟเวอร์ เพียงใส่ httpd บริการเริ่มต้นคำสั่งและการตั้งค่าจะมีผลบังคับใช้
อีกวิธีหนึ่ง - เริ่มต้นผ่าน ISP แบนหรือผ่านทางผู้ให้บริการเรียกเก็บเงินแผง
ไฟล์อาร์เรย์
ใน PHP อัพโหลดไฟล์จะกระทำโดยอาร์เรย์ที่ $ _FILES มันมีข้อมูลทั้งหมดเกี่ยวกับไฟล์ที่เราดาวน์โหลด
หากต้องการดูข้อมูลสิ่งที่มีอยู่ในอาร์เรย์พอที่จะเขียนในตัวจัดการไฟล์ดังต่อไปนี้
เลือกไฟล์ใด ๆ และคลิกที่ "อัปโหลด." ในหน้าจัดการจะแสดงข้อมูลที่เก็บไว้ใน $ _FILES ตัวแปรที่เขียนทั้งหมดด้วยตัวพิมพ์ใหญ่ PHP - ภาษาที่มีความอ่อนไหว
ในขณะที่คุณสามารถดูในอาร์เรย์นี้มีจำนวนมากของเขตข้อมูล ทั้งหมดของพวกเขามีความสำคัญกับเรา สนามแรกที่มีชื่อไฟล์ในรูปแบบที่มีการใช้ในคอมพิวเตอร์ของคุณ
ประเภทไฟล์ประเภทคอลัมน์ที่ระบุ ฟิลด์ Tmp_name สอดคล้องกับชื่อของแฟ้มชั่วคราว หลังจากการสิ้นสุดของสคริปต์จะถูกลบ
ข้อมูลข้อผิดพลาดที่มีรหัสข้อผิดพลาด นี่เป็นอีกเล็ก ๆ น้อย ๆ ขนาด - ขนาดไบต์
ข้อผิดพลาด
ดำเนินการผ่านการอัปโหลดไฟล์ PHP ที่พร้อมเสมอโดยรหัสข้อผิดพลาด ข้อผิดพลาดที่ป้อนใน "ข้อผิดพลาด" ข้อผิดพลาดหน้าจอเป็นศูนย์
พิจารณามูลค่าของข้อผิดพลาดทั้งหมดนี้:
นี่คือตัวอย่างแบบฟอร์มเพื่อดาวน์โหลดไฟล์ซึ่งบ่งชี้ว่าขีด จำกัด ของจำนวนเงินของไฟล์ที่อัปโหลดที่
สคริปต์การอัปโหลดไฟล์: PHP
ในฐานะที่ดำเนินการออกทั้งหมดในการปฏิบัติ? ใน PHP อัพโหลดไฟล์เกิดขึ้นคำสั่งคัดลอก หากคุณมีความสนใจในคำถามของวิธีการดาวน์โหลดไฟล์ที่คำตอบคือคัดลอก ~ ง่ายซึ่งใช้สองพารามิเตอร์ - แฟ้มแหล่งที่มาและแฟ้มปลายทาง
แต่ตามที่ระบุไว้ข้างต้นก็ไม่สามารถที่ จำกัด สำหรับเหตุผลด้านความปลอดภัย ยกตัวอย่างเช่นการตรวจสอบสิ่งที่ชนิดของไฟล์เราจัดส่งคุณสามารถใช้ชนิดของฟิลด์ในอาร์เรย์ $ _FILES อันดับแรกให้จัดการกับการตรวจสอบและจากนั้นย้ายไปยังสคริปต์เต็ม
สมมติว่าคุณต้องการที่จะให้ผู้ใช้สามารถอัปโหลดภาพที่มีความละเอียดเพียง GIF, JPEG หรือ PNG บ่งชี้ว่ามันอาจเป็นเช่นนี้
ถ้า ($ _ FILES [ 'file_upload'] [ 'พิมพ์']! = "image / GIF") {
echo "ขออภัยเราสนับสนุนเฉพาะการดาวน์โหลด Gif-Files";
ทางออก;
}
หากคุณต้องการที่จะจัดส่งทั้งหมด 3 ชนิดเพียงแค่เพิ่มเงื่อนไขเพิ่มเติมให้กับประเภทอื่น ๆ ของภาพ
คัดลอกจะทำเช่นนี้สำเนา (ภาพที่ 1 ภาพที่ 2)
ในกรณีของเราเมื่อทำงานจะดาวน์โหลดจากเครื่องคอมพิวเตอร์ไปยังเซิร์ฟเวอร์ที่คุณสามารถทำได้
สำเนา ($ _ FILES [ 'file_upload'] [ "tmp_name"] "1.jpg")
นั่นคือไฟล์จะถูกคัดลอกด้วยชื่อ 1.jpg นี้ไม่ถูกต้องทั้งหมด ในกรณีนี้ก็เป็นเพียงตัวอย่าง ชื่อไฟล์อยู่เสมอจำเป็นต้องระบุที่แตกต่างกันและระบุนามสกุลขึ้นอยู่กับไฟล์
ตรวจสอบนามสกุลสามารถเป็นวิธีที่แตกต่าง ทั้งหมดขึ้นอยู่กับการพัฒนาของการเล่าเรียน หนึ่งในวิธีที่เร็วที่สุดที่จะ (ความแตกต่างของสิบวินาที) กำหนดส่วนขยาย - นี้เป็นรหัสต่อไป
$ PATH_INFO = pathinfo ($ _ FILES [ 'Photo1'] [ "ชื่อ"]);
$ ต่อ = $ PATH_INFO [ 'นามสกุล'];
ตัวแปร $ ต่อที่เราจะเก็บส่วนขยายที่ต้องการ ชื่อไฟล์ที่สามารถตั้งค่าที่สุ่มโดยใช้ md5 หากคุณวางแผนที่จะดาวน์โหลดไฟล์จำนวนมากจะดีกว่าที่จะส่งพวกเขาไปยังโฟลเดอร์ที่แตกต่างกัน ดังนั้นมันจะเป็นความสะดวกมากขึ้น โดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะล้าง
ดาวน์โหลดรหัสจะเป็นดังนี้
/// ด้วยรูปภาพ
ถ้า ($ _FILES [ 'Photo1'] [ 'tmp_name'] == null)
{
ก้อง ( "
ไฟล์ที่ไม่รู้จัก. strong> p> กลับ ... p> "); ทางออก; } /// สมมติว่าคุณสำหรับโครงการใด ๆ บนเซิร์ฟเวอร์ที่ได้รับอนุญาตในการโหลดไฟล์ขนาดใหญ่ (วิดีโอ) แต่มีภาพเพียงอย่างเดียวและผู้ใช้จำเป็นต้อง จำกัด ถ้า (($ _FILES [ "Photo1"] [ "ขนาด"]> 1024 * 1024 * 2) { ?> ขนาดสูงสุดที่อนุญาต 2 MB strong> กลับ ... p> ทางออก; } // สร้างโฟลเดอร์ // สร้างโฟลเดอร์ของเดือนในปัจจุบัน ถ้า (! file_exists ( "img /" วัน. ( "M"))) { mkdir ( "img /" วันที่ ( "M").); } // สร้างโฟลเดอร์ของวันที่ปัจจุบัน ถ้า (! file_exists ( "img /" วันที่ ( "M"). "/". วันที่ ( "d")).) { mkdir ( "img /" วันที่ ( "M") "/" วันที่ ( "d") ... ); } /// นามสกุลไฟล์ $ PATH_INFO = pathinfo ($ _ FILES [ 'Photo1'] [ "ชื่อ"]); $ ต่อ = $ PATH_INFO [ 'นามสกุล']; /// สร้างชื่อไฟล์ Id $ = md5 วันที่ (( "YMD")); ถ้า (คัดลอก ($ _ FILES [ 'Photo1'] [ "tmp_name"] "img /". วันที่ ( "M"). "/". วันที่ ( "d"). "/". $ ID. $ ต่อ) ) { ก้อง ( "ไฟล์ที่อัปโหลดประสบความสำเร็จ"); } /// การกระทำใด ๆ เพิ่มเติม (รายการในฐานข้อมูลและอื่น ๆ . เอ็น) } อัปโหลดหลายไฟล์ (PHP) เกิดขึ้นโดยวิธีการของเขตข้อมูลเพิ่มเติมในรูปแบบ วิธีการนี้จะไม่ดีมากในขณะที่มัน จำกัด จำนวนไฟล์ที่จะดาวน์โหลด รูปแบบที่ไม่ดีนอกจากนี้ยังมีการพิจารณาในการเขียนโปรแกรม พยายามที่จะทำทุกอย่างแบบไดนามิก ตัวเลือกที่เหมาะ - มันเป็นทางเลือกของจำนวนมากของไฟล์ในครั้งเดียวโดยการกดปุ่มเดียว การทำเช่นนี้สร้างรูปร่างเหมือนรหัสนี้ หลายไฟล์
<ระดับอินพุต = "form_upload" type = "ส่ง" name = "upldFile" value = "เพิ่ม" />
p>
form>
โปรดทราบว่านอกจากนี้หลายคำและชื่อจะได้รับเป็นอาร์เรย์ [] ในกรณีนี้ $ _FILES อาร์เรย์จะแตกต่างกันเล็กน้อย คุณจะได้รับอาร์เรย์ของอาร์เรย์
ในการทดสอบอีกครั้งสามารถใช้ var_dump ($ _ FILES);
ไฟล์ทั้งหมดของคุณจะถูกวางไว้ในอาร์เรย์เช่นนี้
- $ _FILES [ "file1"] [ "ชื่อ"] [0]
- $ _FILES [ "file1"] [ "ชื่อ"] [1]
- เป็นต้น
ในวงเล็บเป็นลายลักษณ์อักษรหมายเลขไฟล์ในอาร์เรย์ นับจากศูนย์ เราปฏิบัติต่อพวกเขาในทางเดียวกันเพียงแค่ขอวงจรและโดยการติดต่อกับรหัสดังอธิบายในตอนท้ายของดัชนีเพิ่ม [$ i]
$ i = 0;
ในขณะที่ ($ _FILES [ "file1"] [ "ชื่อ"] [$ i] <> '')
{
/// วางโค้ดดังกล่าวข้างต้น
}
ดังนั้นท่านจะต้องเกิดขึ้นผ่านการอัปโหลดไฟล์ PHP ไปยังเซิร์ฟเวอร์ในหนึ่งรอบโดยไม่ซ้ำซ้อนของรหัสที่เป็นมักจะเป็นกรณีที่ถ้าคุณใช้รุ่นที่มีจำนวนคงที่ของไฟล์ (ภาพที่ผ่านมา)
Similar articles
Trending Now