Erzwungener Dateidownload in PHP

Muhammad Abubakar 4 Dezember 2021
  1. Dateidownload in PHP erzwingen
  2. Dateien mit PHP herunterladen
  3. Die Funktion readfile()
Erzwungener Dateidownload in PHP

In diesem Tutorial erfahren Sie, wie Sie das Herunterladen von Dateien in PHP erzwingen.

Dateidownload in PHP erzwingen

Dieser Vorgang erfordert zwei Schritte:

  1. Erstellen Sie die PHP-Datei zum Umgang mit der Datei, die Sie schützen möchten.
  2. Fügen Sie eine Relevanz dieser PHP-Datei in den HTML-Code der Seite ein, während der sie angezeigt wird.

Erstellen Sie nach dem Hochladen einer Datei auf den Server ein PHP-Dokument in einem Texteditor. Wenn Sie beispielsweise das Herunterladen von sample.pdf erzwingen möchten, anstatt es online anzuzeigen, erstellen Sie ein Skript wie dieses.

<?php
header("Content-disposition: attachment; filename=sample.pdf");
header("Content-type: application/pdf");
readfile("sample.pdf");
?>

Die Inhaltstyp-Referenz in PHP ist wichtig: Es ist der MIME-Typ der Datei, die Sie schützen. Wenn Sie beispielsweise stattdessen eine MP3-Datei gespeichert haben, müssen Sie die Anwendung/das PDF-Dokument durch ein Audio-MPEG ersetzen.

Dateien mit PHP herunterladen

Normalerweise müssen Sie keine serverseitige Skriptsprache wie PHP verwenden, um Bilder, ZIP-Dateien, PDF-Dokumente, Exe-Dateien usw. herunterzuladen. Wenn dieser Dateityp in einem zugänglichen öffentlichen Ordner gespeichert ist, können Sie einfach ein Hyperlink, der auf diese Datei verweist, und jedes Mal, wenn ein Benutzer auf den Link klickt, lädt der Browser diese Datei automatisch herunter.

<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>

Die Funktion readfile()

Sie können erzwingen, dass Bilder oder andere Dateitypen direkt auf die Festplatte des Benutzers heruntergeladen werden, indem Sie die PHP-Funktion readfile() verwenden. Hier erstellen wir eine einfache Bildergalerie, mit der Benutzer die Bilddateien mit einem einzigen Mausklick aus dem Browser herunterladen können. Lassen Sie uns eine Datei namens image-gallery.php erstellen und den folgenden Code einfügen.

 	<!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("hello.jpg", "resampled1.jpg");
    
    // Loop through array to create image gallery
    foreach($images as $image){
        echo '<div class="img-box">';
            echo '<img src="/examples/images/' . $image . '" width="200" alt="' .  pathinfo($image, PATHINFO_FILENAME) .'">';
            echo '<p><a href="/examples/php/download.php?file=' . urlencode($image) . '">Download</a></p>';
        echo '</div>';
    }
    ?>
</body>
</html>

Wenn Sie sich das obige Beispielprogramm genau ansehen, finden Sie den Download-Link, der zu einer Datei führt; die URL enthält auch den Namen der Bilddatei als AbfrageZeichenkette. Wir haben auch die PHP-Funktion urlencode() verwendet, um die Bilddateinamen so zu kodieren, dass sie sicher als URL-Parameter übergeben werden können, da die Dateinamen unsichere URL-Zeichen enthalten können.

Hier ist der vollständige Code der Datei "download.php", die das Herunterladen von Bildern erzwingt.

<?php
if(!empty($_GET['file'])){
    $fileName = basename($_GET['file']);
    $filePath = 'files.txt/'.$fileName;
    if(!empty($fileName) && file_exists($filePath)){
        // Define headers
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$fileName");
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: binary");
        
        // Read the file
        readfile($filePath);
        exit;
    }else{
        echo 'The file does not exist.';
    }
}
    } else {
        die("Invalid file name!");
    }
}
?>

Ebenso können Sie den Download anderer Dateiformate wie Word Doc, PDF-Dateien usw. erzwingen. Der reguläre Ausdruck im obigen Beispiel lässt einfach keine Dateien zu, deren Namen mit einem Punkt (.) beginnen oder enden. Es erlaubt beispielsweise Dateinamen wie hello.jpeg oder resampled1.jpeg, myscript.min.js, lässt aber hello.jpeg nicht zu. oder .resampled.Jpeg..

Verwandter Artikel - PHP File