Maison > développement back-end > tutoriel php > Comment puis-je forcer de manière fiable les téléchargements de fichiers à l'aide de la fonction « header() » de PHP ?

Comment puis-je forcer de manière fiable les téléchargements de fichiers à l'aide de la fonction « header() » de PHP ?

Mary-Kate Olsen
Libérer: 2024-12-29 02:08:11
original
725 Les gens l'ont consulté

How Can I Reliably Force File Downloads Using PHP's `header()` Function?

Forcer le téléchargement de fichiers à l'aide de la fonction header() de PHP

Lorsque vous essayez de proposer des téléchargements de fichiers aux utilisateurs depuis votre serveur, vous pouvez rencontrer des défis inattendus . En PHP, la fonction header() est couramment utilisée à cette fin, mais divers exemples de code donnent souvent des résultats décevants.

Par exemple, considérons le code suivant :

$size = filesize("Image.png");

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

Malgré la définition du les en-têtes nécessaires, y compris la Content-Disposition correcte pour déclencher la boîte de dialogue de téléchargement de fichier, le comportement souhaité ne parvient pas à se produire.

Solution :

Pour remédier à ce problème, assurez-vous que l'en-tête Content-Type est défini sur "application/octet-stream" au lieu de "image/png " ou tout autre type de mime. Par exemple, les en-têtes suivants devraient systématiquement forcer les téléchargements de fichiers :

$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 utilisant ces en-têtes, vous devriez pouvoir forcer de manière fiable les téléchargements de fichiers à partir de vos applications Web PHP.

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