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