Comment forcer le téléchargement de fichiers à l'aide des en-têtes PHP et de la gestion des fichiers ?

Linda Hamilton
Libérer: 2024-10-20 20:00:30
original
653 Les gens l'ont consulté

How to Force File Downloads Using PHP Headers and File Handling?

Forcer les téléchargements de fichiers en PHP

Permettre aux utilisateurs de télécharger des images ou d'autres fichiers à partir de votre site Web est une exigence courante. En PHP, cette tâche peut être réalisée en exploitant les en-têtes et les techniques de gestion de fichiers appropriés.

Manipulation des en-têtes

Pour forcer le téléchargement d'un fichier, nous devons envoyer les en-têtes appropriés au navigateur. Ces en-têtes contrôlent le comportement du navigateur et lui demandent de télécharger le fichier au lieu de l'afficher dans la fenêtre du navigateur. Certains en-têtes essentiels incluent :

<code class="php">header("Cache-Control: private");
header("Content-Type: application/stream");
header("Content-Length: ".$fileSize);  // File size in bytes
header("Content-Disposition: attachment; filename=".$fileName);  // File name to display</code>
Copier après la connexion

Sortie du fichier

Une fois les en-têtes définis correctement, nous devons sortir le fichier lui-même. Cela se fait à l'aide de la fonction PHP readfile(), qui lit les données du fichier et les envoie au navigateur.

<code class="php">readfile ($filePath);                   
exit();</code>
Copier après la connexion

Exemple de code

Rassembler le tout , voici un exemple de script qui force un téléchargement d'image en PHP :

<code class="php"><?php
    // Fetch the file info.
    $filePath = '/path/to/file/on/disk.jpg';

    if(file_exists($filePath)) {
        $fileName = basename($filePath);
        $fileSize = filesize($filePath);

        // Output headers.
        header("Cache-Control: private");
        header("Content-Type: application/stream");
        header("Content-Length: ".$fileSize);
        header("Content-Disposition: attachment; filename=".$fileName);

        // Output file.
        readfile ($filePath);                   
        exit();
    }
    else {
        die('The provided file path is not valid.');
    }
?></code>
Copier après la connexion

Création d'un panneau de téléchargement

Si au lieu de télécharger le fichier immédiatement, vous préférez un panneau à afficher pour confirmation de l'utilisateur, vous pouvez modifier légèrement le script. Voici un exemple :

<code class="html"><a href="download.php?file=/path/to/file.jpg">Download</a></code>
Copier après la connexion

Dans download.php, vous pouvez afficher un panneau de confirmation avec un bouton qui déclenche le téléchargement du fichier :

<code class="php"><?php
    $file = $_GET['file'];

    if(file_exists($file)) {
        // Display confirmation panel...
        if(isset($_POST['confirm'])) {  // Confirm button clicked
            header("Cache-Control: private");
            header("Content-Type: application/stream");
            header("Content-Length: ".filesize($file));
            header("Content-Disposition: attachment; filename=".basename($file));

            readfile ($file);                   
            exit();
        }
    }
    else {
        die('Invalid file path.');
    }
?></code>
Copier après la connexion

Cette approche vous permet de fournir le utilisateur avec un mécanisme de téléchargement plus convivial.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal