Maison > développement back-end > tutoriel php > Comment forcer de manière fiable les téléchargements de fichiers à l'aide des en-têtes PHP ?

Comment forcer de manière fiable les téléchargements de fichiers à l'aide des en-têtes PHP ?

Mary-Kate Olsen
Libérer: 2024-12-05 12:38:10
original
682 Les gens l'ont consulté

How to reliably force file downloads using PHP headers?

Forcer le téléchargement de fichiers à l'aide de Header() en PHP

Lorsque vous tentez de permettre aux utilisateurs de télécharger des fichiers à partir d'un serveur, les solutions courantes comme celle ci-dessous peuvent ne pas fonctionner :

header('Content-Description: File Transfer');
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="Image.png"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);
readfile("Image.png");
Copier après la connexion

La boîte de dialogue de sauvegarde peut ne pas apparaître, même si la console affiche les en-têtes corrects.

L'erreur cruciale réside dans le En-tête Content-Type. Pour les téléchargements de fichiers, il ne doit pas s'agir d'image/png, mais plutôt :

header('Content-Type: application/octet-stream');
Copier après la connexion

Un ensemble fiable d'en-têtes pour les téléchargements de fichiers est le suivant :

$quoted = sprintf('"%s"', addcslashes(basename($file), '"\'));
$size   = filesize($file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $quoted); 
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);
Copier après la connexion

En s'assurant que le bon les en-têtes sont envoyés, les utilisateurs seront invités avec une boîte de dialogue de sauvegarde lorsqu'ils tenteront de télécharger des fichiers depuis le serveur.

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