PHP 菜鳥教程

PHP 高級教程

PHP & MySQL

PHP 參考手冊

PHP 文件下載

在本教程中,您將學習如何使用PHP強制下載文件。

用PHP下載文件

通常,您不一定需要使用任何服務器端腳本語言(例如PHP)來下載圖像,zip文件,pdf文檔,exe文件等。如果此類文件存儲在公共可訪問的文件夾中,則只需創(chuàng)建一個指向該文件的超鏈接,每當用戶單擊鏈接時,瀏覽器都會自動下載該文件。

<a href="downloads/test.zip">下載Zip文件</a>
<a href="downloads/masters.pdf">下載PDF文件</a>
<a href="downloads/sample.jpg">下載圖像文件</a>
<a href="downloads/setup.exe">下載EXE文件</a>

單擊指向PDF或圖像文件的鏈接不會導致其直接下載到硬盤驅(qū)動器。它將僅在瀏覽器中打開文件。此外,您可以將其保存到硬盤中。但是,默認情況下,zip和exe文件會自動下載到硬盤驅(qū)動器。

使用PHP強制下載

您可以使用PHP readfile()函數(shù)強制將圖像或其他類型的文件直接下載到用戶的硬盤上。在這里,我們將創(chuàng)建一個簡單的圖像庫,允許用戶單擊鼠標從瀏覽器下載圖像文件。

讓我們創(chuàng)建一個名為“ image-gallery.php”的文件,并將以下代碼放入其中。

<!DOCTYPE html>
<html>
<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>

    <?php
    //包含示例圖像文件名的數(shù)組
    $images = array("kites.jpg", "balloons.jpg");
    
    //遍歷數(shù)組以創(chuàng)建圖片庫
    foreach($images as $image){
        echo '<div class="img-box">';
            echo '<img src="images/' . $image . '" width="200" alt="' .  pathinfo($image, PATHINFO_FILENAME) .'">';
            echo '<p><a href="download.html?file=' . urlencode($image) . '">下載</a></p>';
        echo '</div>';
    }
    ?>

</html>

如果仔細查看上面的示例代碼,則會發(fā)現(xiàn)指向“ download.php”文件的下載鏈接點,該URL還包含圖像文件名作為查詢字符串。另外,我們使用PHP urlencode()函數(shù)對圖像文件名進行編碼,以便可以安全地將其作為URL參數(shù)傳遞,因為文件名可能包含URL不安全字符。

這是“ download.php”文件的完整代碼,可強制下載圖像。

<?php
if(isset($_REQUEST["file"])){
    //獲取參數(shù)
    $file = urldecode($_REQUEST["file"]); //解碼URL編碼的字符串

    /* 測試文件名是否包含非法字符
    例如使用正則表達式的“ ../” */
    if(preg_match('/^[^.][-a-z0-9_.]+[a-z]$/i', $file)){
        $filepath = "images/" . $file;

        // 流程下載
        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(); //沖洗系統(tǒng)輸出緩沖區(qū)
            readfile($filepath);
            die();
        } else {
            http_response_code(404);
	        die();
        }
    } else {
        die("Invalid file name!");
    }
}
?>

同樣,您可以強制下載其他文件格式,例如.doc,pdf文件等。

上面示例(第8行)中的正則表達式將完全不允許名稱以點字符(.)開頭或結(jié)尾的文件,例如,例如,它允許使用kites.jpg或Kites.jpg,myscript.min.js等文件名,但不允許kites.jpg.或.kites.jpg。

請查看有關正則表達式的教程,以詳細了解正則表達式。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清