Maison >développement back-end >tutoriel php >Comment puis-je forcer le téléchargement de fichiers en PHP à l'aide de « header() » et éviter les problèmes d'affichage du navigateur ?

Comment puis-je forcer le téléchargement de fichiers en PHP à l'aide de « header() » et éviter les problèmes d'affichage du navigateur ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 06:36:12520parcourir

How Can I Force File Downloads in PHP Using `header()` and Avoid Browser Display Issues?

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

Problème :
Malgré diverses tentatives, les utilisateurs constatent difficultés à demander le téléchargement de fichiers à partir d'un serveur à l'aide de la fonction header() de PHP. Ils observent l'envoi des en-têtes nécessaires mais rencontrent des problèmes lors de l'affichage de la boîte de dialogue de sauvegarde.

Solution :
Pour réussir à forcer les téléchargements de fichiers, les en-têtes doivent être définis de manière appropriée. Le code suivant répond aux préoccupations soulevées :

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

Différences clés par rapport aux tentatives précédentes :

  1. Content-Type : Le bon le type de contenu pour les téléchargements de fichiers est "application/octet-stream" au lieu de "image/png."
  2. Citation du nom de fichier : Le nom du fichier doit être correctement cité pour empêcher l'interprétation de caractères potentiellement malveillants.
  3. En-têtes supplémentaires : Le code comprend les en-têtes « Connexion : Keep-Alive » et « Expires : 0 », qui permettent de garantir des connexions fiables et d'éviter la mise en cache. problèmes.

Navigateurs vérifiés :
Il a été confirmé que cette solution fonctionne dans Firefox 8.0.1, Chrome 15.0.874.121 et Safari 5.1.1.

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