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