亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

PHP 菜鳥(niǎo)教程

PHP 高級(jí)教程

PHP & MySQL

PHP 參考手冊(cè)

PHP 文件下載

在本教程中,您將學(xué)習(xí)如何使用PHP強(qiáng)制下載文件。

用PHP下載文件

通常,您不一定需要使用任何服務(wù)器端腳本語(yǔ)言(例如PHP)來(lái)下載圖像,zip文件,pdf文檔,exe文件等。如果此類文件存儲(chǔ)在公共可訪問(wèn)的文件夾中,則只需創(chuàng)建一個(gè)指向該文件的超鏈接,每當(dāng)用戶單擊鏈接時(shí),瀏覽器都會(huì)自動(dò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或圖像文件的鏈接不會(huì)導(dǎo)致其直接下載到硬盤(pán)驅(qū)動(dòng)器。它將僅在瀏覽器中打開(kāi)文件。此外,您可以將其保存到硬盤(pán)中。但是,默認(rèn)情況下,zip和exe文件會(huì)自動(dòng)下載到硬盤(pán)驅(qū)動(dòng)器。

使用PHP強(qiáng)制下載

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

讓我們創(chuàng)建一個(gè)名為“ 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)建圖片庫(kù)
    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>

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

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

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

    /* 測(cè)試文件名是否包含非法字符
    例如使用正則表達(dá)式的“ ../” */
    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!");
    }
}
?>

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

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

請(qǐng)查看有關(guān)正則表達(dá)式的教程,以詳細(xì)了解正則表達(dá)式。