วิธีดาวน์โหลดไฟล์ใน PHP

How Download File Php



โดยทั่วไป ไม่จำเป็นต้องใช้สคริปต์ PHP เพื่อดาวน์โหลดไฟล์ที่มีนามสกุล exe และ zip . หากตำแหน่งไฟล์ของไฟล์ประเภทนี้ถูกตั้งค่าเป็น href แอตทริบิวต์ขององค์ประกอบสมอ จากนั้นไฟล์จะดาวน์โหลดโดยอัตโนมัติเมื่อผู้ใช้คลิกที่ลิงค์ดาวน์โหลด ไฟล์บางไฟล์เช่น ภาพ ไฟล์ ไฟล์ PDF ไฟล์ ข้อความ ไฟล์ CSV ไฟล์ ฯลฯ ไม่ดาวน์โหลดโดยอัตโนมัติ แต่เปิดในเบราว์เซอร์แทนเมื่อผู้ใช้คลิกลิงก์ดาวน์โหลด ไฟล์เหล่านี้สามารถบังคับให้ดาวน์โหลดไฟล์เหล่านี้ใน PHP ได้โดยใช้ ไฟล์อ่าน () ฟังก์ชั่นที่ไม่ดาวน์โหลดโดยอัตโนมัติ บทช่วยสอนนี้แสดงวิธีบังคับดาวน์โหลดไฟล์ใด ๆ โดยใช้สคริปต์ PHP

ตรวจสอบลิงค์ดาวน์โหลด

ก่อนหน้านี้เคยกล่าวไว้ว่า zip และ exe ไฟล์จะดาวน์โหลดโดยอัตโนมัติโดยไม่ต้องใช้สคริปต์ PHP ขั้นแรก สร้างไฟล์ HTML ด้วยรหัสต่อไปนี้ ในที่นี้ องค์ประกอบสมอสี่ตัวถูกกำหนดให้ดาวน์โหลดไฟล์สี่ประเภท ไฟล์ประเภทนี้รวมถึงไฟล์ TEXT, ZIP, PDF และ JPG







Download.html



< html >
< ศีรษะ >
< ชื่อ >ดาวน์โหลดไฟล์</ ชื่อ >
</ ศีรษะ >
< ร่างกาย >
< NS >< ถึง href='abc.txt'>ดาวน์โหลดไฟล์ TEXT</ ถึง ></ NS >
< NS >< ถึง href='horizon.zip'>ดาวน์โหลดไฟล์ ZIP</ ถึง ></ NS >
< NS >< ถึง href='บรรยาย.pdf'>ดาวน์โหลดไฟล์ PDF</ ถึง ></ NS >
< NS >< ถึง href='กุหลาบ.jpg'>ดาวน์โหลดไฟล์ JPG</ ถึง ></ NS >
</ ร่างกาย >
</ html >

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




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





ดาวน์โหลดไฟล์โดยใช้ฟังก์ชัน readfile()

NS ไฟล์อ่าน () ฟังก์ชั่นใช้ในสคริปต์ PHP เพื่อบังคับให้ดาวน์โหลดไฟล์ใด ๆ ของตำแหน่งปัจจุบันหรือไฟล์ที่มีเส้นทางของไฟล์ ไวยากรณ์ของฟังก์ชันนี้ได้รับด้านล่าง



ไวยากรณ์
int readfile ( สตริง $filename [, bool $use_include_path = false [, ทรัพยากร $context ]] )

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

ตัวอย่างที่ 1: ดาวน์โหลดไฟล์ที่มีชื่อไฟล์

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

download2.html

< html >
< ศีรษะ >
< ชื่อ >ดาวน์โหลดไฟล์</ ชื่อ >
</ ศีรษะ >
< ร่างกาย >
< NS >< ถึง href='download.php?path=abc.txt'>ดาวน์โหลดข้อความไฟล์</ ถึง ></ NS >
< NS >< ถึง href='download.php?path=horizon.zip'>ดาวน์โหลดไฟล์ ZIP</ ถึง ></ NS >
< NS >< ถึง href='download.php?path=lecture.pdf'>ดาวน์โหลดไฟล์ PDF</ ถึง ></ NS >
< NS >< ถึง href='download.php?path=rose.jpg'>ดาวน์โหลดไฟล์ JPG</ ถึง ></ NS >
</ ร่างกาย >
</ html >

เราจะสร้างไฟล์ PHP ด้วยรหัสต่อไปนี้เพื่อดาวน์โหลดไฟล์โดยบังคับ ที่นี่ ที่ไปแล้ว) ฟังก์ชันใช้เพื่อตรวจสอบว่า $_GET['เส้นทาง'] ถูกกำหนดไว้ หากกำหนดตัวแปรแล้ว แฟ้มที่มีอยู่() ฟังก์ชันใช้เพื่อตรวจสอบว่าไฟล์มีอยู่ในเซิร์ฟเวอร์หรือไม่ ต่อไป หัวข้อ() ฟังก์ชันใช้เพื่อตั้งค่าข้อมูลส่วนหัวที่จำเป็นก่อนใช้งาน ไฟล์อ่าน () การทำงาน. NS ชื่อฐาน() ฟังก์ชั่นใช้เพื่อดึงชื่อไฟล์และ ขนาดไฟล์() ฟังก์ชันใช้สำหรับอ่านขนาดของไฟล์เป็นไบต์ ซึ่งจะแสดงในกล่องโต้ตอบเปิดเพื่อดาวน์โหลดไฟล์ NS ล้าง() ฟังก์ชันใช้เพื่อล้างบัฟเฟอร์เอาต์พุต NS ไฟล์อ่าน () ฟังก์ชันนี้ใช้กับชื่อไฟล์เท่านั้นที่นี่

download.php



ถ้า( ที่ไปแล้ว ($_GET['เส้นทาง']))
{
//อ่านชื่อไฟล์
$ชื่อไฟล์ = $_GET['เส้นทาง'];
//ตรวจสอบว่ามีไฟล์อยู่หรือไม่
ถ้า( แฟ้มที่มีอยู่ ($ชื่อไฟล์)) {

//กำหนดข้อมูลส่วนหัว
หัวข้อ ('คำอธิบายเนื้อหา: การถ่ายโอนไฟล์');
หัวข้อ ('ประเภทเนื้อหา: แอปพลิเคชัน / octet-stream');
หัวข้อ ('การควบคุมแคช: ไม่มีแคช ต้องตรวจสอบอีกครั้ง');
หัวข้อ ('หมดอายุ: 0');
หัวข้อ ('การจัดการเนื้อหา: สิ่งที่แนบมา; ชื่อไฟล์=''. ชื่อฐาน ($ชื่อไฟล์).'' ');
หัวข้อ ('เนื้อหา-ความยาว: ' . ขนาดไฟล์ ($ชื่อไฟล์));
หัวข้อ ('Pragma: สาธารณะ');

//ล้างบัฟเฟอร์เอาต์พุตของระบบ
ล้าง ();

// อ่านขนาดของไฟล์
readfile ($ชื่อไฟล์);

//สิ้นสุดจากสคริปต์
NS ();
}
อื่น{
โยนออก 'ไม่มีไฟล์';
}
}
อื่น
โยนออก 'ไม่ได้กำหนดชื่อไฟล์'
?>

เอาท์พุต
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากคลิกลิงก์ดาวน์โหลดไฟล์รูปภาพ ขนาดไฟล์ของ rose.jpg ภาพคือ 27.2 KB ตามที่แสดงในกล่องโต้ตอบ คุณสามารถดาวน์โหลดไฟล์โดยเลือก บันทึกไฟล์ ปุ่มตัวเลือกแล้วกดปุ่ม ตกลง ปุ่ม.

ตัวอย่างที่ 2: ดาวน์โหลดไฟล์ด้วยเส้นทางไฟล์

หากไฟล์อยู่ที่ตำแหน่งไฟล์ที่กำหนด จะต้องระบุเส้นทางของไฟล์ใน URL ในตัวอย่างนี้ เราจะสร้างไฟล์ HTML ด้วยรหัสต่อไปนี้ ซึ่งจะส่งผ่านชื่อไฟล์ที่มีเส้นทางของไฟล์:

download3.html

< html >
< ศีรษะ >
< ชื่อ >ดาวน์โหลดไฟล์</ ชื่อ >
</ ศีรษะ >
< ร่างกาย >
< NS >< ถึง href='download.php?path=downloads/lecture.pdf'>ดาวน์โหลดไฟล์ PDF</ ถึง ></ NS >
< NS >< ถึง href='download2.php?path=downloads/rose.jpg'>ดาวน์โหลดไฟล์ JPG</ ถึง ></ NS >
</ ร่างกาย >
</ html >

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

download2.php


ถ้า( ที่ไปแล้ว ($_GET['เส้นทาง']))
{
// อ่าน url
$url = $_GET['เส้นทาง'];

//ล้างแคช
clearstatcache ();

//ตรวจสอบว่ามีเส้นทางของไฟล์หรือไม่
ถ้า( แฟ้มที่มีอยู่ ($url)) {

//กำหนดข้อมูลส่วนหัว
หัวข้อ ('คำอธิบายเนื้อหา: การถ่ายโอนไฟล์');
หัวข้อ ('ประเภทเนื้อหา: แอปพลิเคชัน / octet-stream');
หัวข้อ ('การจัดการเนื้อหา: สิ่งที่แนบมา; ชื่อไฟล์=''. ชื่อฐาน ($url).'' ');
หัวข้อ ('เนื้อหา-ความยาว: ' . ขนาดไฟล์ ($url));
หัวข้อ ('Pragma: สาธารณะ');

//ล้างบัฟเฟอร์เอาต์พุตของระบบ
ล้าง ();

// อ่านขนาดของไฟล์
readfile ($url,จริง);

//สิ้นสุดจากสคริปต์
NS ();
}
อื่น{
โยนออก 'ไม่มีเส้นทางของไฟล์';
}
}
โยนออก 'ไม่ได้กำหนดเส้นทางของไฟล์'

?>

เอาท์พุต
หลังจากคลิกลิงก์ดาวน์โหลดไฟล์ PDF แล้ว ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น

วิดีโอสอน

บทสรุป

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