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
Mary-Kate Olsenoriginal
2024-12-29 02:08:11604parcourir

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");

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

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