Quelles sont les méthodes et précautions pratiques pour envoyer des fichiers compressés au navigateur via la fonction fpassthru?
gitbox
2025-09-12
<?php
// L'article commence
écho " Quelles sont les méthodes et précautions pratiques pour envoyer des fichiers compressés au navigateur via la fonction fpassthru?
" ; écho " Dans le développement de PHP, il est souvent nécessaire d'envoyer des fichiers compressés sur le serveur (tels que Zip, GZ, etc.) directement au navigateur pour que les utilisateurs puissent télécharger. Les fonctions sont un choix efficace. Ils peuvent lire le contenu de fichiers à partir de pointeurs de fichiers et de sortie directement vers le navigateur sans charger le fichier entier en mémoire. Cet article introduira certaines méthodes et précautions pratiques.
" ; écho " 1. Utilisation de base de fpassthru
" ; écho La syntaxe de base de "fpassthru est la suivante:
" ; écho "
int fpassthru (ressource \ $ manche)
" ; Echo " Il lira le fichier pointé par la manche \ $ jusqu'à la fin du fichier et sortira les données directement au navigateur, renvoyant le nombre de sorties d'octets.
" ; écho " 2. Étapes pour envoyer des fichiers compressés au navigateur
" ; écho " "
; écho " Définissez l'en-tête HTTP correct: assurez-vous que le navigateur sait qu'il s'agit d'une demande de téléchargement de fichiers. " ; écho " Fichier ouvrir: utilisez fopen pour ouvrir le fichier compressé que vous devez envoyer. " ; écho " Utilisez FPASSTHRU pour sortir du contenu du fichier: transférez le contenu du fichier directement vers le navigateur. " ; écho " Fermer le pointeur de fichier: libérer la ressource. " ; écho "" ; écho " Exemple de code:
" ; écho "
\ $ file = 'example.zip';
if (file_exists (\ $ file)) {
En-tête («Content-Description: File Transfer»);
En-tête ('Content-Type: Application / Zip');
En-tête ('Content-Disposition: pièce jointe; FileName = \ "'. Basename (\ $ file). '\"');
En-tête («contenu-transfert-codage: binaire»);
En-tête ('Content-Length:'. FileSize (\ $ file));
\ $ fp = fopen (\ $ file, 'rb');
if (\ $ fp) {
fpassthru (\ $ fp);
fclose (\ $ fp);
sortie;
}
}
" ; Echo " Trois, méthodes pratiques
" ; écho " ; écho " Utilisez ReadFile ou FPASSTHRU pour éviter de charger des fichiers gros en mémoire à la fois. " ; écho " Combiné avec ob_clean () et flush () pour nettoyer le tampon de sortie pour assurer la transmission de fichiers correcte. " ; écho " Informer la taille du fichier du navigateur à l'avance via le contenu pour améliorer l'expérience de téléchargement. " ; écho " Les fichiers volumineux peuvent-ils être lus et sorties en morceaux, et utiliser set_time_limit (0) pour empêcher le délai d'attente. " ; écho "" ; écho " Iv. Choses à noter
" ; écho " ; écho " Assurez-vous qu'il n'y a pas de sortie, y compris des espaces et HTML, avant d'envoyer le fichier, sinon l'en-tête HTTP sera cassé. " ; écho " Définissez correctement le type MIME, tel que Zip utilise Application / Zip , GZ utilise l'application / GZIP . " ; écho " Les autorisations de serveur doivent permettre à PHP de lire le fichier cible. " ; écho " Lorsque vous téléchargez des fichiers volumineux, envisagez des paramètres de limitation de bande passante et de délai d'expiration. " ; écho "" ; écho " Cinq, résumé
" ; écho " L'utilisation de FPASSTHRU peut envoyer efficacement des fichiers compressés sur le serveur au navigateur pour éviter une utilisation excessive de la mémoire. Pendant l'utilisation, vous devez prêter attention à des problèmes tels que les paramètres d'en-tête HTTP, le traitement du tampon de sortie et les autorisations de fichiers. La maîtrise de ces compétences peut rendre la fonction de téléchargement de fichiers plus stable et efficace.
" ; // fin de l'article
?>