ตรวจสอบลิงค์ดาวน์โหลด
ก่อนหน้านี้เคยกล่าวไว้ว่า 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 เพื่อช่วยให้ผู้อ่านเพิ่มคุณลักษณะการดาวน์โหลดลงในสคริปต์ของตน