คอมพิวเตอร์ประเภทไฟล์

ไฟล์ที่อัปโหลดไปยังเซิร์ฟเวอร์: 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 ที่พร้อมเสมอโดยรหัสข้อผิดพลาด ข้อผิดพลาดที่ป้อนใน "ข้อผิดพลาด" ข้อผิดพลาดหน้าจอเป็นศูนย์

พิจารณามูลค่าของข้อผิดพลาดทั้งหมดนี้:

ก็กล่าวข้างต้นเกี่ยวกับพารามิเตอร์ที่สามารถระบุไว้ใน HTML ปกติ

นี่คือตัวอย่างแบบฟอร์มเพื่อดาวน์โหลดไฟล์ซึ่งบ่งชี้ว่าขีด จำกัด ของจำนวนเงินของไฟล์ที่อัปโหลดที่

สคริปต์การอัปโหลดไฟล์: 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)

{

ก้อง ( "

ไฟล์ที่ไม่รู้จัก.

กลับ ... ");

ทางออก;

}

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

ถ้า (($ _FILES [ "Photo1"] [ "ขนาด"]> 1024 * 1024 * 2)

{

?>

ขนาดสูงสุดที่อนุญาต 2 MB

กลับ ...

ทางออก;

}

// สร้างโฟลเดอร์

// สร้างโฟลเดอร์ของเดือนในปัจจุบัน

ถ้า (! 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 = "เพิ่ม" />

โปรดทราบว่านอกจากนี้หลายคำและชื่อจะได้รับเป็นอาร์เรย์ [] ในกรณีนี้ $ _FILES อาร์เรย์จะแตกต่างกันเล็กน้อย คุณจะได้รับอาร์เรย์ของอาร์เรย์

ในการทดสอบอีกครั้งสามารถใช้ var_dump ($ _ FILES);

ไฟล์ทั้งหมดของคุณจะถูกวางไว้ในอาร์เรย์เช่นนี้

  1. $ _FILES [ "file1"] [ "ชื่อ"] [0]
  2. $ _FILES [ "file1"] [ "ชื่อ"] [1]
  3. เป็นต้น

ในวงเล็บเป็นลายลักษณ์อักษรหมายเลขไฟล์ในอาร์เรย์ นับจากศูนย์ เราปฏิบัติต่อพวกเขาในทางเดียวกันเพียงแค่ขอวงจรและโดยการติดต่อกับรหัสดังอธิบายในตอนท้ายของดัชนีเพิ่ม [$ i]

$ i = 0;

ในขณะที่ ($ _FILES [ "file1"] [ "ชื่อ"] [$ i] <> '')

{

/// วางโค้ดดังกล่าวข้างต้น

}

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

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 th.birmiss.com. Theme powered by WordPress.