Maison >développement back-end >tutoriel php >Comment puis-je forcer le téléchargement de fichiers en PHP à l'aide de la fonction « header() » ?

Comment puis-je forcer le téléchargement de fichiers en PHP à l'aide de la fonction « header() » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 21:10:12997parcourir

How Can I Force File Downloads in PHP Using the `header()` Function?

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

Pour permettre aux utilisateurs de télécharger des fichiers depuis votre serveur, vous pouvez utiliser l'en-tête() fonction. Toutefois, si vous rencontrez des problèmes avec des exemples existants, cet article vous fournira une solution.

Le code que vous avez essayé n'incluait pas les en-têtes cruciaux suivants :

  • Content-Type spécifiant le type de fichier (par exemple, image/png)
  • Content-Disposition indiquant que le fichier doit être téléchargé plutôt que affiché dans le navigateur
  • Content-Length indiquant la taille du fichier

Voici un extrait de code corrigé qui devrait fonctionner :

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

header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="Image.png"');
header('Content-Length: ' . $size);
readfile("Image.png");

Étapes de dépannage :

  • Assurez-vous que le chemin du fichier est correct et que le fichier existe.
  • Vérifiez que le serveur Web est autorisé à accéder au fichier.
  • Vérifiez que tous les en-têtes nécessaires sont présents et corrects.
  • Essayez de désactiver les extensions de navigateur ou les plugins qui peut interférer avec les téléchargements.
  • Videz le cache du navigateur et les cookies.
  • Testez le code dans plusieurs navigateurs pour exclure problèmes spécifiques au navigateur.

Considérations supplémentaires :

  • Pour les fichiers non-image, le type de contenu doit être défini en conséquence (par exemple, application /octet-stream pour les fichiers binaires génériques).
  • Si vous souhaitez que le fichier soit affiché en ligne dans le navigateur au lieu d'être téléchargé, remplacez la pièce jointe par en ligne dans l'en-tête Content-Disposition.
  • Vous pouvez empêcher la mise en cache du fichier en ajoutant les en-têtes suivants :
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

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