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!