Maison  >  Article  >  développement back-end  >  Comment forcer le téléchargement de fichiers à l'aide des en-têtes PHP et de la gestion des fichiers ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-20 20:00:30660parcourir

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>

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>

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>

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>

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>

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!

Déclaration:
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