PHP 檔案下載
在本教程中,你將學習如何使用 PHP 強制下載檔案。
使用 PHP 下載檔案
通常,你不一定需要使用任何伺服器端指令碼語言(如 PHP)來下載影象,zip 檔案,pdf 文件,exe 檔案等。如果此類檔案儲存在公共可訪問資料夾中,你只需建立一個指向該檔案的超連結,每當使用者單擊該連結時,瀏覽器將自動下載該檔案。
<a href="downloads/test.zip">Download Zip file</a>
<a href="downloads/masters.pdf">Download PDF file</a>
<a href="downloads/sample.jpg">Download Image file</a>
<a href="downloads/setup.exe">Download EXE file</a>
單擊指向 PDF 或影象檔案的連結不會導致它直接下載到你的硬碟驅動器。它只會在瀏覽器中開啟檔案。此外,你可以將其儲存到你的硬碟驅動器。但是,預設情況下,zip
和 exe
檔案會自動下載到硬碟驅動器。
使用 PHP 強制下載
你可以使用 PHP readfile()
函式強制影象或其他型別的檔案直接下載到使用者的硬碟驅動器。在這裡,我們將建立一個簡單的相簿,允許使用者只需單擊滑鼠即可從瀏覽器下載影象檔案。
讓我們建立一個名為 image-gallery.php
的檔案,並在其中放置以下程式碼。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple Image Gallery</title>
<style type="text/css">
.img-box{
display: inline-block;
text-align: center;
margin: 0 15px;
}
</style>
</head>
<body>
<?php
// Array containing sample image file names
$images = array("kites.jpg", "balloons.jpg");
// Loop through array to create image gallery
foreach($images as $image){
echo '';
echo '<img src="images/' . $image . '" width="200" alt="' . pathinfo($image, PATHINFO_FILENAME) .'">';
echo '<p><a href="download.php?file=' . urlencode($image) . '">Download</a></p>';
echo '';
}
?>
</body>
</html>
如果你仔細看到上面的示例程式碼,你會發現下載連結指向 download.php
檔案,URL 也包含影象檔名作為查詢字串。此外,我們使用 PHP urlencode()
函式對影象檔名進行編碼,以便可以安全地將其作為 URL 引數傳遞,因為檔名可能包含 URL 不安全字元。
這是 download.php
檔案的完整程式碼,它強制影象下載。
<?php
if(isset($_REQUEST["file"])){
// Get parameters
$file = urldecode($_REQUEST["file"]); // Decode URL-encoded string
$filepath = "images/" . $file;
// Process download
if(file_exists($filepath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filepath));
flush(); // Flush system output buffer
readfile($filepath);
exit;
}
}
?>
同樣,你可以強制下載其他檔案格式,如 Word 檔案,pdf 檔案等。